0

好的,所以每当我调用 DiInstallDevice、InstallSelectedDriver 时,我都会收到这个奇怪的错误,指出“ ERROR_NO_CATALOG_FOR_OEM_INF ”。返回的错误代码是 3758096943。当我在 err.exe 中查找时,它说

# for decimal -536870353 / hex 0xe000022f :
  ERROR_NO_CATALOG_FOR_OEM_INF                                  setupapi.h
# for hex 0xffffffff / decimal -1 :
  NO_TITLE                                                      ftsiface.h
  USE_DEFAULT                                                   ftsiface.h
  JET_wrnNyi                                                    esent98.h
# /* Function Not Yet Implemented */
  LZERROR_BADINHANDLE                                           lzexpand.h
# /* invalid input handle */
  MAPI_DIAG_NO_DIAGNOSTIC                                       mapidefs.h
  MSIDBERROR_FUNCTIONERROR                                      msiquery.h
# function error
  ERROR_UNHANDLED_ERROR                                         ntddchgr.h
# Unknown error condition
  PDR_ERROR                                                     penwin.h
# parameter or unspecified error
  ICERR_UNSUPPORTED                                             vfw.h
  ERROR_UNHANDLED_ERROR                                         winioctl.h
# Unknown error condition
# 11 matches found for "3758096943"

我正在使用 setupapi,因此除了与“ SetupCopyOEMInf() ”相关的错误之外,该错误没有显示任何错误,而我与之无关。有问题的驱动程序是 Intel HD 520 签名驱动程序。我已经验证并通过 Microsoft 更新目录下载了它。

使用 SetupDiSetSelectedDriver()选择驱动程序,并使用SetupDiSetSelectedDevice()选择正确的设备。如果有人能指出我正确的方向,那就太好了!

代码 :

PopulateDeviceInstaceIds(L"PCI\\VEN_8086&DEV_1916");
            SP_DRVINFO_DATA drvData;
            SP_DRVINFO_DETAIL_DATA drvDetailData;
            SP_DEVINFO_DATA LocDevData;
            MakeDevClassHandles(handle,instancesOfDevice.at(0).c_str());
            SetDRVINFO(&LocDevData,&drvDetailData,&drvData,L"Intel Corporation",L"22.20.16.4836",TRUE);
            std::cout<<SetupDiSetSelectedDevice(handle,&LocDevData)<<endl;
            std::cout<<SetupDiSetSelectedDriver(handle,&LocDevData,&drvData)<<endl;
            if(&drvData!=NULL)
            {
                HMODULE libHandle = LoadLibraryW(L"newdev.dll");
                lpfnInstallSelectedDriver addr;
                DWORD rebootRec;
                addr = (lpfnInstallSelectedDriver)GetProcAddress(libHandle,"InstallSelectedDriver");
                if(addr!=NULL && addr(NULL,handle,NULL,TRUE,&rebootRec))
                {

                }
                else
                    cout<<"InstallSelectedDriver ERR : "<<GetLastError();
                 if(DiInstallDevice(NULL,handle,&LocDevData,&drvData,0,&nRebo))
                {

                }
                else
                {
                    cout<<"DiInstall Device error : "<<GetLastError();
                    std::cout<<"\n\nWaiting for upto 10 seconds for changes to reflect..";
                    Sleep(10000);

我想这段代码就足够了,如果没有,请告诉我。整个代码只有几百行,所以。

SetDRVINFO ()函数只是在结构中设置正确的设备和驱动程序,我在调试时验证了它们。两种 else 情况都会引发相同的错误。

4

0 回答 0