Поскольку я являюсь плакатом в первый раз, я извиняюсь, если я непреднамеренно отказался от какой-либо ключевой информации, но здесь она идет.Странная проблема относительно 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», я я, очевидно, что-то пропустил, и я в конце своей веревки. Поэтому, если кто-то может подтолкнуть меня в правильном направлении к тому, что я могу пропустить, это было бы весьма признательно.