2
我在調用SetupDiGetDeviceInterfaceDetail(https://msdn.microsoft.com/en-us/library/ff551120.aspx)時不斷收到Windows錯誤87,即使將所有可選參數切換爲NULL,我仍然收到錯誤,但我使用了兩個第一個參數另一個可行的功能,所以我不明白他們有什麼不對。獲取錯誤87,SetupDiGetDeviceInterfaceDetail的參數不正確
HDEVINFO hdiInfo = SetupDiGetClassDevsW(&guid, NULL, NULL, 0x12);
SP_DEVICE_INTERFACE_DATA hidDevIData = SP_DEVICE_INTERFACE_DATA();
hidDevIData.cbSize = sizeof(hidDevIData);
bool isValid = SetupDiEnumDeviceInterfaces(hdiInfo, 0, &guid, i, &hidDevIData);
if (isValid)
{
DWORD dwLength;
PSP_DEVICE_INTERFACE_DETAIL_DATA hidDevIDetailData = PSP_DEVICE_INTERFACE_DETAIL_DATA();
hidDevIData.cbSize = 8;
hidDevIDetailData = new SP_DEVICE_INTERFACE_DETAIL_DATA();
hidDevIDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
SetupDiGetDeviceInterfaceDetail(hdiInfo, &hidDevIData, NULL, 0, &dwLength, NULL); //ERROR 87 : ERROR_INVALID_PARAMETER
}
我真的不知道哪個參數可能不正確,因爲所有前面的函數都返回true(所以GUID是有效的)。
在'hidDevIData.cbSize = 8;'爲什麼你放魔法常數作爲大小?在這兩個調用中你沒有使用相同的參數。 –
您可能想要在繼續執行之前驗證SetupDiEnumDeviceInterfaces()的返回值是否爲true。如果由於某種原因,這個調用返回false,你hidDevIData可能包含無效數據將被傳遞給SetupDiGetDeviceInterfaceDetail() –
@布拉-preidžius的事情是把8上都引發錯誤1784(所提供的用戶緩衝區是無效的請求的操作)爲SetupDiEnumDeviceInterfaces,並將sizeof(hidDevIData)放在兩個只會導致程序崩潰。像「myprogram.exe剛剛停止」。 加上這是一個特定USB設備的C#代碼的適應,所以我嘗試儘可能我可以尊重的價值觀。 – sh5164