Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重新启动后禁用USB键盘_C++_Winapi_Keyboard_Setupapi - Fatal编程技术网

C++ 重新启动后禁用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 =

我使用SetupDiSetClassInstallParamsSetupDiCallClassInstaller禁用特定的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),&params.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
call
CM_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
是正确的。但并非所有设备都支持它