知道U盘盘符后如何获取U盘的信息,如PID,VID那些信息? 知道U盘盘符后如何获取U盘的信息,如PID,VID那些信息?我知道的是用CreateFile;SetIoControl,来得到,但是好像不行...急... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://download.csdn.net/source/613705 不行,这个我都下载来试了,就是知道盘符后不知道DEVICEIOCONTROL函数里面的第二个该怎么设置 注册表里不就是有吗?还有SetupDi函数族也可以拿到。 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盘,名称:\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产品版本:\r\n"); str = (pDevDesc->ProductRevisionOffset ? &p[pDevDesc->ProductRevisionOffset] : "(NULL)"); ShowMessage(str); ShowMessage("\r\n序列号:\r\n"); str = (pDevDesc->SerialNumberOffset ? &p[pDevDesc->SerialNumberOffset] : "(NULL)"); ShowMessage(str); } delete pDevDesc; CloseHandle(hDevice); } BOOL GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc){ STORAGE_PROPERTY_QUERY Query; DWORD dwOutBytes; BOOL bResult; Query.PropertyId = StorageDeviceProperty; Query.QueryType = PropertyStandardQuery; bResult = ::DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &Query, sizeof(STORAGE_PROPERTY_QUERY), pDevDesc, pDevDesc->Size, &dwOutBytes, (LPOVERLAPPED)NULL); return bResult;} CMFCToolBar ComboBox PDF文件结构(二) 看看哪错了 vc6 下使用webbrowser访问网页,再用WinPcap捕捉网卡数据的问题 谁能给个解决问题的办法?? 选中对话框中滚动条属性需要写什么代码? 如何使edit控件获取焦点为可以输入的状态 在ListCtrl里,怎样折行显示呀? 关于Unicode的几个问题 寻找vc下的中断程序例子 对话框程序的关闭问题 Renderer filter必须处于filter链的末端吗?
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盘,名称:\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产品版本:\r\n");
str = (pDevDesc->ProductRevisionOffset ? &p[pDevDesc->ProductRevisionOffset] : "(NULL)");
ShowMessage(str);
ShowMessage("\r\n序列号:\r\n");
str = (pDevDesc->SerialNumberOffset ? &p[pDevDesc->SerialNumberOffset] : "(NULL)");
ShowMessage(str);
} delete pDevDesc;
CloseHandle(hDevice);
}
BOOL GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc)
{
STORAGE_PROPERTY_QUERY Query;
DWORD dwOutBytes;
BOOL bResult; Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery; bResult = ::DeviceIoControl(hDevice,
IOCTL_STORAGE_QUERY_PROPERTY,
&Query, sizeof(STORAGE_PROPERTY_QUERY),
pDevDesc, pDevDesc->Size,
&dwOutBytes,
(LPOVERLAPPED)NULL); return bResult;
}