2012-04-25 4 views
2

프로그래밍 방식으로 NDIS 6.0 경량 필터 드라이버를 설치하는 C++ 코드를 작성하려고합니다. WinDDK, 온라인 예제 및 MSDN 설명서를 검토 한 결과 코드 샘플이 나왔습니다. (오류 처리가 명확하게 생략되었습니다.) 문제는 INetCfgClassSetup :: Install은 항상 오류 0x8004a024를 반환한다는 것입니다. (헤더 파일에서 오류 코드를 찾을 수 없습니다.)프로그래밍 방식으로 NDIS 필터 드라이버 설치

동일한 .inf 파일을 사용하여 드라이버를 수동 설치하면 올바르게 작동합니다.

WinDDK의 Bindview 샘플은 INetCfgClassSetup :: SelectAndInstall을 호출하는 경로를 취하는 한 드라이버를 잘 설치합니다. INSTCfgClassSetup :: 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을 나타냅니다. Install 함수는 쓰기 잠금을 필요로하므로 INetCfg-> AcquireWriteLock을 사용하여 쓰기 잠금을 얻으십시오. 결국 잠금 장치와 인터페이스를 해제하는 것을 잊지 마십시오.

+0

의미가 있습니다. 불행히도 잠금 장치를 확보해도 문제가 해결되지 않았습니다. 오류 코드가 800f0203으로 변경되었습니다. – glagolig

+0

QueryNetCfgClass (GUID_DEVCLASS_NETSERVICE 대신 GUID_DEVCLASS_NETTRANS)에서 잘못된 GUID를 사용하고있는 것으로 나타났습니다. 올바른 GUID로 모든 것이 잘 작동합니다. – glagolig

관련 문제