2017-02-20 55 views
-1

有沒有辦法訪問netsh API(例如WIN3​​2 API,WDK)?
比如,我想通過netsh獲得移動寬帶信息使用下面的命令:如何以編程方式通過Windows SDK訪問'netsh'API

netsh mbn show interfaces 

所以我想真正的問題是:什麼是使用Windows SDK方法netsh mbn show interfaces實際方案的代表性?

僞代碼一個例子:

MBN_DEVICE mbn; 
GetMbnDev(&mbn); 
char* Name = mbn.Name; 
char* IMEI = mbn.IMEI; 
char* DeviceId = mbn.DevId; 
float signal = mbn.Signal; 

哪些API(Win32的/ .NET /。核心)我會打電話得到同樣的結果在數據結構喜歡用命令以上?

+0

是沒有使用相同的API爲'netsh'的方式。 –

+0

'netsh.exe'是一個可執行文件,並不提供直接的C++ API。您可以使用管道與C++程序中的可執行文件進行交互。更常用的方法是直接訪問winsocks API(或通過一些抽象如boost :: asio)。 –

+0

@πάνταῥεῖ在這種情況下,netsh.exe實際上導出了C函數,這些函數被NAPMONTR.DLL調用 – Anders

回答

0

某些Microsoft工具使用內部/未記錄的API來執行其工作,因此克隆它們往往需要進行一些調查。

第一步是下載Dependency Walker並查看netsh imports的函數。在這種情況下,它看起來並不像導入大量與網絡相關的東西(在我的Windows 8機器上),但它確實導入了CoCreateInstanceGetProcAddress,因此您可以在調試器中設置兩個斷點,這應該允許您確定函數/接口它最終結束呼叫。

甚至在你到達那裏之前,你可以簡單地谷歌「移動寬帶API」,它應該帶你到this MSDN page。你應該看看這些接口,看看他們是否提供你之後的信息...

+0

在'CoCreateInstance'上設置斷點旁邊沒用。當然,它會返回一個接口指針。 *一些*界面。然後繼續調用一些未知的方法,只通過索引將其識別到v表中。 – IInspectable

+0

它必須調用的第一件事是'IUnknown :: QueryInterface',並且您知道vtable中的位置(因爲否則COM將無法工作),因此您至少可以確定它是否使用了已記錄的COM接口(或至少有編組信息的接口)。 –

+0

@IInspectable這當然不是無用的,你可以從第一個參數中找到CLSID。如果你幸運的話,調試器知道這個CLSID,如果不行,你可以嘗試在註冊表或互聯網上查找它。如果這沒有幫助,您可以按照返回的界面進行操作。在最初的調查中,你只是想弄清楚它是否使用記錄的東西。 – Anders

相關問題