Ниже приведен код, вызывающий метод Windows SetupDiSetClassInstallParamsW -
bool
Util::SvmDisableNic(HDEVINFO devInfoSet, SP_DEVINFO_DATA deviceInfo)
{
SP_PROPCHANGE_PARAMS params = {0};
SP_DEVINSTALL_PARAMS_W installParams = {0};
//
// Disable device
//
params.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
params.StateChange = DICS_DISABLE;
params.Scope = DICS_FLAG_GLOBAL;
params.HwProfile = 0;
if (!SetupDiSetClassInstallParamsW(devInfoSet, &deviceInfo,
&(params.ClassInstallHeader),
sizeof params)) {
DWORD err = GetLastError();
SYSMSG_FUNC(
Debug, _T("Failed setting device params to disable: Err: 0x%X"), err);
return false;
}
Этот код успешно выполняется, однако в нескольких виртуальных машинах происходит сбой SetupDiSetClassInstallParamsW, а GetLastError возвращает ошибку код ошибки 0xD. От Microsoft до c похоже, что это соответствует ERROR_INVALID_DATA. Виртуальные машины, в которых этот код работает успешно, и те, в которых он работает, идентичны с точки зрения конфигурации аппаратного / программного обеспечения. Любая идея, как мы можем отладить, почему этот windows API не работает?