我試圖使用DeviceIoControl調用IOCTL_BTH_GET_LOCAL_INFO,我相信它可以完成(相應地Bluetooth Profile Driver IOCTLs)。DeviceIoControl返回ERROR_INVALID_USER_BUFFER
我在使用Visual Studio 2012(可能與默認配置)在Windows 7 64位系統。
手柄有一個有效的值(我去掉了驗證碼),但總的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
);
(...)
經過一番研究,我嘗試以下解決方案:
- 改變結構包對準1/4/8字節(與VS選項);
- 使用這8個字節對齊值(後來我發現,這 已經發生,即使有數據類型小於8個字節)。過了一會兒,我讀過某處misaligment是DeviceIoControl的交易給你,所以可能沒有必要擔心。
的解決方案,上述所有都失敗了。你覺得它是什麼? VS有一堆爲Win32配置的,但(雖然第一次與IOCTL),從來沒有給我之前的一個問題。
我在32feet.NET上看到過一些代碼,所以可能只是我的錯誤(我看不出有什麼區別)。