首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DeviceIoControl返回ERROR_INVALID_USER_BUFFER

DeviceIoControl返回ERROR_INVALID_USER_BUFFER
EN

Stack Overflow用户
提问于 2012-10-15 21:40:06
回答 1查看 1.4K关注 0票数 2

我试图使用信息调用DeviceIoControl,我认为这是可以做到的(相应地对蓝牙配置文件驱动程序IOCTLs)。

我使用Visual 2012在Windows 7 x64上(可能使用默认配置)。

句柄有一个有效值(我删除了验证代码),但是DeviceIoControl总是返回ERROR_INVALID_USER_BUFFER (错误1784)。

下面是代码:

代码语言:javascript
复制
int main() {

    BTH_LOCAL_RADIO_INFO buffer;
    BOOL fStatus;
    HANDLE h;
    DWORD returned = 0;

    h = CreateFile(
        TEXT("\\\\.\\BthPan"), 
        GENERIC_READ | GENERIC_WRITE ,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL, 
        OPEN_EXISTING,
        0,
        NULL);


    fStatus = DeviceIoControl(
            h, 
            IOCTL_BTH_GET_LOCAL_INFO,
            NULL, 0,
            (LPVOID)&buffer, sizeof(BTH_LOCAL_RADIO_INFO),
            &returned,
            (LPOVERLAPPED) NULL
            );   
(...)

经过一些研究,我尝试了以下解决方案:

  1. 将结构包对齐改为1/4/8字节(使用VS选项);
  2. 使用8字节对齐的值(后来我发现这种情况已经发生了,即使数据类型小于8字节)。过了一段时间,我在某个地方读到了DeviceIoControl为您处理的问题,所以可能不需要担心。

上述所有解决方案都失败了。你觉得那是什么?VS有很多用于Win32的配置,但这从来没有给我带来问题(虽然第一次使用IOCTL )。

我在32feet.NET上看到了一些代码,所以这可能只是我的一个错误(我看不出有什么不同)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-16 07:46:11

您将IOCTL_BTH_GET_LOCAL_INFO发送到错误的设备(蓝牙个人区域网络而不是蓝牙无线电)。

因此,我建议您使用BluetoothFindFirstRadioBluetoothFindNextRadioBluetoothFindRadioClose来简单地迭代本地蓝牙收音机,而不是为它们猜测正确的DOS设备名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12904446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档