2012-10-15 43 views
2

我試圖使用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. 改變結構包對準1/4/8字節(與VS選項);
  2. 使用這8個字節對齊值(後來我發現,這 已經發生,即使有數據類型小於8個字節)。過了一會兒,我讀過某處misaligment是DeviceIoControl的交易給你,所以可能沒有必要擔心。

的解決方案,上述所有都失敗了。你覺得它是什麼? VS有一堆爲Win32配置的,但(雖然第一次與IOCTL),從來沒有給我之前的一個問題。

我在32feet.NET上看到過一些代碼,所以可能只是我的錯誤(我看不出有什麼區別)。

回答

相關問題