需要呼叫SetupDiEnumDeviceInfo來獲取網卡資訊,SetupDiEnumDeviceInfo在32位xp上回傳1,很正常;在64位win7系統上,回傳值一直為0,GetLastError()的回傳值是1784,從網上查,這個值表示,所提供的用戶緩沖區對所申請的操作無效。代碼如下:
std::string strClassName = "4d36e972-e325-11ce-bfc1-08002be10318";
TCHAR * GUIDString = NULL;
GUID guid,guid1;
ZeroMemory(&guid, sizeof(GUID));
ZeroMemory(&guid1, sizeof(GUID));
GUIDString = (char*)strClassName.c_str();
UuidFromString((unsigned char *)GUIDString, &guid);
hDevInfo = SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_ALLCLASSES | DIGCF_PRESENT);
if (INVALID_HANDLE_VALUE == hDevInfo)
{
// FormatMSG(GetLastError(), &lpszMsg);
throw lpszMsg;
}
DWORD i=0;
SP_DEVINFO_DATA DeviceInfoData;
ZeroMemory(&DeviceInfoData, sizeof(SP_DEVINFO_DATA));
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
BOOL bSuccess = SetupDiEnumDeviceInfo(hDevInfo, 0, &DeviceInfoData);
DWORD nError = GetLastError();
求教高手,折騰這個問題好久了,大家多指教。
uj5u.com熱心網友回復:
問題應該出在這里DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);如果是64位作業系統把它分配32
如果是32位作業系統把它分配28
打個斷點看看是不是32個位元組?
uj5u.com熱心網友回復:
什么編譯器,VS2008,VS2013沒這個問題uj5u.com熱心網友回復:
vc6.0 DeviceInfoData.cbSize =32 也不行,是不是一定要換編譯器了uj5u.com熱心網友回復:
木有匯入合適的元件。或者木有定義合適的GUID
#include <setupapi.h>
#include <initguid.h>
#pragma comment(lib, "Winmm.lib")
#pragma comment(lib, "setupapi.lib")
//DEFINE_GUID(GUID_DEVINTERFACE_USB_HUB,
//0xf18a0e88, 0xc30c, 0x11d0, 0x88, 0x15, 0x00, 0xa0, 0xc9, 0x06, 0xbe, 0xd8);
DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,
0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED);
#define GUID_CLASS_USB_DEVICE GUID_DEVINTERFACE_USB_DEVICE
//這里呼叫SetupDiEnumDeviceInfo能成功
//已測驗,win8.1 x64版本下能正常列舉所有usb設備
uj5u.com熱心網友回復:
建議使用CxDeviceFind類來查找USB設備和其他設備http://www.cnblogs.com/EdmundDwyane/p/3161524.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/150738.html
標籤:硬件/系統
