DeviceIoControl,带有输入unsigned char缓冲区C ++

时间:2012-10-09 13:06:25

标签: c++ buffer deviceiocontrol

我在使用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%x\n", GetLastError()); // always error 0x6!

    return 1;

}

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

UPD 我的句柄创建功能:

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

1 个答案:

答案 0 :(得分:2)

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

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