C++ 重新启动后禁用USB键盘
我使用SetupDiSetClassInstallParams和SetupDiCallClassInstaller禁用特定的USB设备C++ 重新启动后禁用USB键盘,c++,winapi,keyboard,setupapi,C++,Winapi,Keyboard,Setupapi,我使用SetupDiSetClassInstallParams和SetupDiCallClassInstaller禁用特定的USB设备 SP_PROPCHANGE_PARAMS params; params.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; params.StateChange =
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
}
这种方法适用于除键盘以外的所有设备。
如果我用这种方法让她失去能力
返回了错误\u NOT \u DISABLEABLE。但重新启动后,键盘将被禁用
禁用前,将为该设备设置标志DN_DISABLEABLE和DN_REMOVABLE,并通过功能检查CM_Get_DevNode_Status。
我做错了什么?此设备不支持禁用为什么您不直接调用@RbMn,因为我不知道此功能,并使用SetupDiSetClassInstallParams启用设备。已尝试禁用CM_Disable_DevNode,它给出了错误,但在重新启动后正常工作,这可能是一个解决方案,非常感谢。强烈表示
SetupDiCallClassInstaller
callCM_Disable_DevNode
内部,但我们可以直接调用它。尽管在文档中CM_DISABLE_PERSIST
仅从win10使用-在我的测试中CM_DISABLE_DevNode
在我们使用设备管理器中的DISABLE菜单项时调用,并在重新启动后生效PERSIST,即使没有此标志。你犯了哪一个错误?@RbMn有和没有标志CM\u DISABLE\u PERSIST我得到了CR\u NOT\u disabled。与标志都一样:键盘工作,直到重新启动或拔出USB端口和返回错误代码说-该设备不能被禁用。这不是你的错误。简单的设备不支持这一点。调用CM\u Disable\u DevNode
是正确的。但并非所有设备都支持它