1、hid设备和u盘设备读取方式是否一样。
2、读取u盘和移动硬盘序列号具体方法和步骤。
void CTestUSBDlg::ShowUdisk(){
int k = 0;
DWORD MaxDriveSet, CurDriveSet; DWORD drive, drivetype; TCHAR szBuf[300]; HANDLE hDevice; PSTORAGE_DEVICE_DESCRIPTOR pDevDesc; char * p; CString str; AfxMessageBox("adword"); for(k=0; k<26; k++) szMoveDiskName[k] = '/0'; k = 1; MaxDriveSet = CurDriveSet = 0; MaxDriveSet = GetLogicalDrives(); CurDriveSet = MaxDriveSet; for ( drive = 0; drive < 32; ++drive ) { if ( MaxDriveSet & (1 << drive) ) { DWORD temp = 1<<drive; _stprintf( szDrvName, _T("%c://"), 'A'+drive ); if(GetDriveType( szDrvName )== DRIVE_REMOVABLE) { drivetype = DRVREMOVE; sprintf(szBuf, "?//%c:", 'A'+drive); hDevice = CreateFile(szBuf, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); if (hDevice != INVALID_HANDLE_VALUE) { pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1]; pDevDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1; if(GetDisksProperty(hDevice, pDevDesc)) { szMoveDiskName[k] = chFirstDriveFromMask(temp); szMoveDiskName[0]=k; k++; ShowMessage("/r/n找到U盘,厂家ID:/r/n"); p= (char *)pDevDesc; str = (pDevDesc->VendorIdOffset ? &p[pDevDesc->VendorIdOffset]:"(NULL)"); ShowMessage(str); ShowMessage("/r/n产品ID:/r/n"); str=(pDevDesc->ProductIdOffset ? &p[pDevDesc->ProductIdOffset]:"(NULL)"); ShowMessage(str); ShowMessage("/r/n厂家ID:/r/n"); str = (pDevDesc->VendorIdOffset ? &p[pDevDesc->VendorIdOffset] : "(NULL)"); ShowMessage(str); ShowMessage("/r/n序列号:/r/n"); str = (pDevDesc->SerialNumberOffset ? &p[pDevDesc->SerialNumberOffset] : "(NULL)" ); ShowMessage(str); ShowMessage("/r/n设备类型:/r/n"); str = (pDevDesc->DeviceType ? &p[pDevDesc->DeviceType] : "(NULL)" ); ShowMessage(str); ShowMessage("/r/n是否可移动:/r/n"); str = (pDevDesc->RemovableMedia ? &p[pDevDesc->RemovableMedia] : "(NULL)" ); ShowMessage(str); } delete pDevDesc; CloseHandle(hDevice); } } } } str.Format("/r/n U盘符:/r/n%s",&szMoveDiskName[1]); if(szMoveDiskName[0]==0) { str="/r/n没有U盘/r/n"; m_showMessage.Empty(); } ShowMessage(str);}
获得的序列号为空。
不知用什么方法可以获得序列号。