2012-04-25 64 views
2

我正在嘗試編寫以編程方式安裝NDIS 6.0輕量級篩選器驅動程序的C++代碼。 在審查了WinDDK,在線示例和MSDN文檔後,我最終以 下面的代碼示例。 (爲清晰起見,錯誤處理被忽略) 問題是INetCfgClassSetup :: Install總是返回錯誤0x8004a024。 (我在頭文件中找不到錯誤代碼。)以編程方式安裝NDIS篩選器驅動程序

使用相同的.inf文件手動安裝驅動程序可以正常工作。

從WinDDK的Bindview示例安裝驅動程序就好,只要 它需要調用INetCfgClassSetup :: SelectAndInstall的路徑。使用INetCfgClassSetup :: Install的替代路徑 不起作用。

在我的機器上啓用了內核調試,因此不需要驅動程序簽名。

下面的代碼有什麼問題嗎?

謝謝。

.... 
isCopied = SetupCopyOEMInfA(pathToInf, // path to inf file 
          pathToBin, // dir containing driver binary 
          SPOST_PATH, 
          0, 
          DestinationInfFileName, 
          256, 
          NULL, 
          NULL); 
.... 
INetCfg  *pnc = NULL; 
INetCfgClassSetup *pncClassSetup = NULL; 
HRESULT  hr; 
OBO_TOKEN   OboToken; 
.... 
hr = CoCreateInstance(CLSID_CNetCfg, 
         NULL, CLSCTX_INPROC_SERVER, 
         IID_INetCfg, 
         (void**)&pnc); 
.... 
hr = pnc->QueryNetCfgClass (&GUID_DEVCLASS_NETSERVICE, 
          IID_INetCfgClassSetup, 
          (void**)&pncClassSetup); 
.... 
ZeroMemory(&OboToken, sizeof(OboToken)); 
OboToken.Type = OBO_USER; 
// 
// this call fails: 
hr = pncClassSetup->Install(COMPONENT_ID, 
          &OboToken, 
          0, 
          0, 
          0, 
          0, 
          NULL); 

回答

3

錯誤代碼0x8004a024代表NETCFG_E_NO_WRITE_LOCK。安裝函數需要寫入鎖定,所以嘗試使用INetCfg-> AcquireWriteLock獲取。不要忘記最終釋放鎖,然後釋放界面。

+0

有道理。不幸的是,獲得一個鎖並沒有解決問題。錯誤代碼更改爲800f0203。 – glagolig 2012-04-27 23:00:34

+0

原來我在QueryNetCfgClass(GUID_DEVCLASS_NETTRANS而不是GUID_DEVCLASS_NETSERVICE)中使用了錯誤的GUID。使用正確的GUID一切正常。 – glagolig 2012-04-28 02:12:05

相關問題