Da dies mein erster Beitrag ist, entschuldige ich mich, falls ich versehentlich wichtige Informationen ausgelassen haben sollte, aber hier kommt es.
Hintergrund: Ich führe Tests durch, um herauszufinden, was das nicht dokumentierte Array-Mitglied ‘OwningModuleInfo’ in MIB_TCPROW_OWNER_MODULE ist und wie es dieser Funktion hilft festzustellen, welcher Prozess den TCP-Endpunkt besitzt. Ich bin zu dem Schluss gekommen, dass der erste Eintrag im Array der Index des Dienstes in der Liste der laufenden Dienste ist, was uns zu dem seltsamen Problem führt. Ich verwende Visual Studio 2012 (Update 3) unter Windows 7. Die Test-App wird mit UAC = requireAdministrator ausgeführt (asInvoker produziert jedoch dasselbe Ergebnis).
Problem: Wenn ich auf x64 abziele, schlägt GetOwnerModuleFromTcpEntry für einige Einträge in der TCP-Tabelle fehl und gibt “126 - Das angegebene Modul wurde nicht gefunden.” zurück. Wenn ich auf Win32 abziele, verschwindet dieses Problem. Da ich weiß, dass dies nur passiert, wenn der Eintrag einem Dienst gehört, habe ich den folgenden Dummy-Aufruf kurz vor dem Aufruf meiner Testfunktion (jetzt auf x64 abzielend) versucht:
SC_HANDLE serviceManager = OpenSCManager(
NULL,
NULL,
SC_MANAGER_ENUMERATE_SERVICE);
CloseServiceHandle(serviceManager);
MyTestFunction(); // Druckt die TCP-Tabelle zusammen mit den Eigentümerinformationen
Jetzt funktioniert es einwandfrei. Entfernen Sie den Aufruf an OpenSCManager erneut, und es schlägt fehl. Sagen Sie mir, dass das nicht wirklich durcheinander ist?
- Ich habe alle Compiler- und Linker-Einstellungen, die ich finden konnte, überprüft.
- Ich habe doppelt überprüft, dass ich auf die richtigen Bibliotheken verlinke.
- Ich habe eine C++/CLI-Version mit identischem Code erstellt, die sowohl für Win32 als auch für x64 funktioniert.
- Überprüfung auf Speicher/Ausrichtungs/Pointer-Probleme.
Beispiel-Ausgabe des Testlaufs ohne Dummy-Aufruf
Pid: 2896
Owner: Skype.exe
Pid: 848
Owner: Fehler 126 - Das angegebene Modul wurde nicht gefunden.
Pid: 2896
Owner: Skype.exe
Pid: 3756
Owner: Fehler 126 - Das angegebene Modul wurde nicht gefunden.
Mit Dummy-Aufruf
Pid: 2896
Owner: Skype.exe
Pid: 848
Owner: RpcSs
Pid: 2896
Owner: Skype.exe
Pid: 3756
Owner: WMPNetworkSvc
Abgesehen davon, dass dies ein Fehler seitens Microsoft ist, fehlt mir offensichtlich etwas und ich bin am Ende meiner Weisheit. Wenn also jemand mir einen Hinweis geben könnte, in welche Richtung ich suchen soll, wäre das sehr dankbar.