2013-07-29 73 views
2

由於我是第一次發佈海報,如果我無意中遺漏了任何關鍵信息,我會表示歉意,但在此處發佈。關於定位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 

短這是微軟」部分中的錯誤,我我明顯錯過了一些東西,而我正處在我的繩索末端。所以,如果有人能夠讓我朝正確的方向推動我可能錯過的東西,那將不勝感激。

回答

0

問題似乎是advapi32.dll未加載。這個函數似乎假定advapi32.dll在調用時被加載,顯然並不總是這樣。我仍然不知道爲什麼advapi32.dll沒有自動加載,但我想這是另一個問題。

See this thread on the MSDN forum.