я использовал SetupDiSetClassInstallParams а также SetupDiCallClassInstaller отключить конкретное USB-устройство.
SP_PROPCHANGE_PARAMS params;
params.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
params.StateChange = DICS_DISABLE;
// SP_DEVINFO_DATA - Info.DevInfoData
if (!SetupDiSetClassInstallParams(hDevInfo, &(Info.DevInfoData),¶ms.ClassInstallHeader, sizeof(params))) {
Error = GetLastError();
return Error;
}
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &(Info.DevInfoData))) {
Error = GetLastError(); // error here
}
Этот подход работает на всех устройствах, кроме клавиатуры.
Если я попытаюсь отключить ее таким образом
ERROR_NOT_DISABLEABLE возвращено. Но после перезагрузки клавиатура будет отключена.
Перед отключением для этого устройства устанавливаются флаги DN_DISABLEABLE и DN_REMOVABLE, проверяемые функцией CM_Get_DevNode_Status.
Что я делаю не так?
Задача ещё не решена.
Других решений пока нет …