由於我是第一次發佈海報,如果我無意中遺漏了任何關鍵信息,我會表示歉意,但在此處發佈。關於定位x64時GetOwnerModuleFromTcpEntry的奇怪問題
背景:我做了一些測試,以找出MIB_TCPROW_OWNER_MODULE無證成員陣列「OwningModuleInfo」是什麼,以及如何援助表示在確定哪些進程擁有TCP端點的功能。我得出的結論是,數組中的第一項是運行服務列表中服務的索引,這使我們陷入了奇怪的問題。我在Windows 7上使用Visual Studio 2012(更新3)。測試應用程序在UAC = requireAdministrator(asInvoker產生相同的結果,但是)下運行。
問題:當我目標64,然後在TCP表中的一些條目,GetOwnerModuleFromTcpEntry失敗並返回「126 - 指定的模塊找不到。」當我的目標是Win32時,這個問題就消失了。因爲我知道,當進入由服務擁有這只是發生,我嘗試以下啞呼叫只是調用我的測試功能(正瞄準64)之前:現在
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
短這是微軟」部分中的錯誤,我我明顯錯過了一些東西,而我正處在我的繩索末端。所以,如果有人能夠讓我朝正確的方向推動我可能錯過的東西,那將不勝感激。