好的,所以每当我调用 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 情况都会引发相同的错误。