我正在尝试使用DeviceIoControl调用IOCTL_BTH_GET_LOCAL_INFO,我相信可以这样做(相应于Bluetooth Profile Driver IOCTLs)。
我在使用Visual Studio 2012的Windows 7 x64上(可能使用默认配置)。
句柄具有有效值(我删除了验证码)但DeviceIoControl始终返回ERROR_INVALID_USER_BUFFER(错误1784)。
以下是代码:
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
);
(...)
经过一番研究后,我尝试了以下解决方案:
上述所有解决方案都失败了。你觉得它是什么? VS有一堆Win32的配置,但之前从未给我一个问题(尽管第一次使用IOCTL)。
我在32feet.NET上看过一些代码,所以可能只是我的错误(我看不出有任何区别)。
答案 0 :(得分:1)
您正在将IOCTL_BTH_GET_LOCAL_INFO
发送到错误的设备(蓝牙个人专区网络而不是蓝牙广播)。
因此,我建议您使用BluetoothFindFirstRadio
,BluetoothFindNextRadio
和BluetoothFindRadioClose
来简单地遍历本地蓝牙无线电,而不是为它们猜测正确的DOS设备名称。