Итак, я получаю эту странную ошибку, заявляющую «ERROR_NO_CATALOG_FOR_OEM_INF«всякий раз, когда я вызываю DiInstallDevice, InstallSelectedDriver. Возвращается код ошибки:
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 () Функция просто устанавливает правильное устройство и драйвер в структурах, я проверил их во время отладки. В обоих остальных случаях возникает одна и та же ошибка.
Задача ещё не решена.
Других решений пока нет …