带有输入无符号字符缓冲区 C++ 的 DeviceIoControl

Posted

技术标签:

【中文标题】带有输入无符号字符缓冲区 C++ 的 DeviceIoControl【英文标题】:DeviceIoControl with input unsigned char buffer C++ 【发布时间】:2012-10-09 13:06:25 【问题描述】:

我在使用 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 错误,我做错了什么?

更新 我的句柄创建函数:

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】:

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

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

【讨论】:

以上是关于带有输入无符号字符缓冲区 C++ 的 DeviceIoControl的主要内容,如果未能解决你的问题,请参考以下文章

字符到无符号字符

将无符号整数输入属性传递给顶点着色器

带有无符号字符的文本格式

C++ 从无符号字符数组创建 GUID

C++ 使用 istringstream 将整数读取为无符号字符

如何将无符号字符数组存储为浮点值?