2013-07-29 2 views
2

Поскольку я являюсь плакатом в первый раз, я извиняюсь, если я непреднамеренно отказался от какой-либо ключевой информации, но здесь она идет.Странная проблема относительно GetOwnerModuleFromTcpEntry при таргетинге x64

фон: Я делаю некоторые тесты, чтобы выяснить, что недокументированный член массива «OwningModuleInfo» в MIB_TCPROW_OWNER_MODULE и как это помощь сказала функцию в определении того, какой процесс владеет TCP конечной точки. Я пришел к выводу, что первым элементом в массиве является индекс службы в списке запущенных сервисов, что приводит нас к странной проблеме. Я использую Visual Studio 2012 (обновление 3) в Windows 7. Тест-приложение работает под UAC = requireAdministrator (asInvoker производит тот же результат, однако).

Проблема: Когда я предназначаться x64, то для некоторых записей в таблице TCP, GetOwnerModuleFromTcpEntry терпит неудачу и возвращает «126 - Указанный модуль не может быть найден.». Когда я нацелен на Win32, эта проблема исчезает. Так как я знаю, что это происходит только тогда, когда запись принадлежит службе, я попытался следующий фиктивный вызов непосредственно перед вызовом моей тестовой функции (теперь нацеливание x64):

SC_HANDLE serviceManager = OpenSCManager(
    NULL, 
    NULL, 
    SC_MANAGER_ENUMERATE_SERVICE); 

CloseServiceHandle(serviceManager); 

MyTestFunction(); // Prints the TCP table along with owner information 

Теперь он работает просто отлично. Снова вызовите OpenSCManager, и он не работает. Скажи мне, что это на самом деле не испортилось?

  • Я рассмотрел все настройки компилятора и компоновщика, которые я мог найти.
  • Я проверил дважды, поэтому я привязываюсь к соответствующим библиотекам.
  • Я создал версию C++/CLI с идентичным кодом, который отлично работает как для Win32, так и для x64.
    • Проверено на наличие проблем памяти/выравнивания/указателя. Выход

Пример из теста без манекена вызова

Pid: 2896 
Owner: Skype.exe 

Pid: 848 
Owner: Error 126 - The specified module could not be found. 

Pid: 2896 
Owner: Skype.exe 

Pid: 3756 
Owner: Error 126 - The specified module could not be found. 

фиктивного вызовом

Pid: 2896 
Owner: Skype.exe 

Pid: 848 
Owner: RpcSs 

Pid: 2896 
Owner: Skype.exe 

Pid: 3756 
Owner: WMPNetworkSvc 

Краткого этих существ ошибки со стороны Microsoft», я я, очевидно, что-то пропустил, и я в конце своей веревки. Поэтому, если кто-то может подтолкнуть меня в правильном направлении к тому, что я могу пропустить, это было бы весьма признательно.

ответ

0

Проблема заключается в том, что advapi32.dll не загружен. Указанная функция, по-видимому, предполагает, что advapi32.dll загружается при вызове, что, по-видимому, не всегда так. Я до сих пор не знаю, почему advapi32.dll не загружается автоматически, но я думаю, это другой вопрос.

See this thread on the MSDN forum.

Смежные вопросы