关于createfile打开USB设备
HDEVINFO hDevInfo = SetupDiGetClassDevs((LPGUID)&ClassGuid, NULL, 0, DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
SetupDiDestroyDeviceInfoList(hDevInfo);
}
TCHAR szBuf[MAX_PATH];
SP_DEVINFO_DATA spDevInfoData = {sizeof(SP_DEVINFO_DATA)};
CString sTmp, sTotal;
//开始列举设备
for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
{
//得到设备类描述
if (SetupDiGetClassDescription(&spDevInfoData.ClassGuid, szBuf, MAX_PATH, NULL))
{
sTmp.Format(_T("\n%03d : ClassDescription = %s\n"), i, szBuf);
sTotal += sTmp;
}
//得到设备实例的唯一标识ID(由注册表路径组成)
if (SetupDiGetDeviceInstanceId(hDevInfo, &spDevInfoData, szBuf, MAX_PATH, NULL))
{
sTmp.Format(_T("%03d : InstanceId = %s\n"), i, szBuf);
sTotal += sTmp;
}
//得到设备名称
if (SetupDiGetDeviceRegistryProperty(
hDevInfo, &spDevInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szBuf, MAX_PATH, NULL))
{
sTmp.Format(_T("%03d : DeviceDesc = %s\n"), i, szBuf);
sTotal += sTmp;
}
//得到设备型号
if (SetupDiGetDeviceRegistryProperty(
hDevInfo, &spDevInfoData, SPDRP_FRIENDLYNAME, NULL, (PBYTE)szBuf, MAX_PATH, NULL))
{
sTmp.Format(_T("%03d : FriendName = %s\n"), i, szBuf);
sTotal += sTmp;
}
//得到设备在注册表中的子路径
if (SetupDiGetDeviceRegistryProperty(
hDevInfo, &spDevInfoData, SPDRP_DRIVER, NULL, (PBYTE)szBuf, MAX_PATH, NULL))
{
sTmp.Format(_T("%03d : Regedit Path = %s\n"), i, szBuf);
sTotal += sTmp;
}
AfxMessageBox(sTotal);
hDevice=CreateFile(szBuf,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
if(hDevice==INVALID_HANDLE_VALUE)
{
AfxMessageBox("erro");
}
请高手指点下,为什么我打开设备老实失败啊~~~
前提是,我能获得设备的信息,设备在注册表的子路径都可以获得··就是打开失败