具有输入无符号字符缓冲区C++的设备 IoControl

DeviceIoControl with input unsigned char buffer C++

本文关键字:IoControl C++ 缓冲区 输入 无符号 字符      更新时间:2023-10-16

我在使用 DeviceIOControl 将 128 字节缓冲区放入驱动程序时遇到问题,我使用以下代码:

int Initialize(unsigned char* public_signature, int size)
{
    int ret = DeviceIoControl( 
    DeviceFileHandle,
    2236440,
    public_signature,
    size,
    NULL,
    0,
    NULL,
    NULL);

    if(ret != 0)
        return 0;
    wprintf(L"Format message failed with 0x%xn", GetLastError()); // always error 0x6!
    return 1;
}

我总是0x6错误,我做错了什么?

上发我的句柄创建功能:

int CreateFileHandle()
{
    DeviceFileHandle = CreateFile( L"Devicetest",
    GENERIC_WRITE,
    GENERIC_READ | GENERIC_WRITE,
    NULL,
    OPEN_EXISTING,
    0,
    0);
    if(DeviceFileHandle)
        return 0;
    return 1;
}

错误在 CreateFile 的第一个参数中。在您的示例中,它将尝试打开文件,而不是设备。此外,您没有转义字符串中的反斜杠。 t和类似字符在C++中被解释为特殊字符。

设备名称应为 "\\.\Device\test"