C++ 错误6:无效的句柄DeviceIoControl()

C++ 错误6:无效的句柄DeviceIoControl(),c++,visual-studio-2015,deviceiocontrol,C++,Visual Studio 2015,Deviceiocontrol,我正在尝试创建一个简单的显示器亮度调整。SetMonitorBrightness()在所需的监视器上无法工作(ERROR\u GRAPHICS\u I2C\u ERROR\u transmisting\u DATA),因此我正在尝试IOCTL\u VIDEO\u SET\u DISPLAY\u BRIGHTNESS. 为了获得句柄,我使用了CreateFile: HANDLE hDisplay = ::CreateFile(_T("\\.\LCD"), GENERIC_READ | GE

我正在尝试创建一个简单的显示器亮度调整。SetMonitorBrightness()在所需的监视器上无法工作(
ERROR\u GRAPHICS\u I2C\u ERROR\u transmisting\u DATA
),因此我正在尝试
IOCTL\u VIDEO\u SET\u DISPLAY\u BRIGHTNESS.

为了获得句柄,我使用了CreateFile:

HANDLE hDisplay = ::CreateFile(_T("\\.\LCD"),
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    CREATE_NEW,
    FILE_FLAG_BACKUP_SEMANTICS, NULL);
现在,当我尝试访问DeviceIoControl()中的句柄时

我得到
错误6:无效句柄


我做错了什么?

您是否检查了
CreateFile
的结果?我怀疑您的一些标志(
CREATE\u NEW
…BACKUP…
)是错误的。另外:完成后请关闭手柄,否则显示切换(例如用于演示)会出现错误行为。相信我。错误检查不够,您肯定没有发现CreateFile()失败。创造新的没有意义。使用从EnumMonitors获得的监视器设备名称或类似“DISPLAY1”的别名。请记住,IOCTL同样可能失败,如果与显示器的I2C通信不起作用,那么就没有希望了。以编程方式设置显示器亮度通常是一个巨大的失败,最好避免。哦,你也没有在设备名称中充分地跳过“\”。(哦,讽刺的是:我第一次也没有在这条评论中漏掉它…)可能的重复你检查了
CreateFile
的结果了吗?我怀疑您的一些标志(
CREATE\u NEW
…BACKUP…
)是错误的。另外:完成后请关闭手柄,否则显示切换(例如用于演示)会出现错误行为。相信我。错误检查不够,您肯定没有发现CreateFile()失败。创造新的没有意义。使用从EnumMonitors获得的监视器设备名称或类似“DISPLAY1”的别名。请记住,IOCTL同样可能失败,如果与显示器的I2C通信不起作用,那么就没有希望了。以编程方式设置显示器亮度通常是一个巨大的失败,最好避免。哦,你也没有在设备名称中充分地跳过“\”。(哦,讽刺的是:我第一次在评论中也没有逃脱……)可能是重复的
DWORD ret = NULL;
OVERLAPPED olp;
if (!DeviceIoControl(hDisplay, IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS, &brgt, sizeof(brgt), NULL, 0, &ret, &olp))
{
    //ErrorMessageblabla
}