如何识别插入后变成“本地磁盘”的u盘??求助

veryhehe2011 2012-08-15 03:42:02
因为什么CF卡的缘故,致使插入的u盘都变成“本地磁盘”了,因我写的一个程序是从u盘中自动拷贝,所以我的这个程序在这种情况下无法实现这个功能了,请问哪位大侠可以帮我解决这个问题一下??谢谢
...全文
1005 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
veryhehe2011 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
C/C++ code


BOOL NUsb::GetDiskProp(HANDLE hDisk, _LogDiskInfo &Info)
{
STORAGE_PROPERTY_QUERY PropQuery;
DWORD dwRead;
BOOL ……
[/Quote]

i wanna say thank you
Yofoo 2012-08-16
  • 打赏
  • 举报
回复

BOOL NUsb::GetDiskProp(HANDLE hDisk, _LogDiskInfo &Info)
{
STORAGE_PROPERTY_QUERY PropQuery;
DWORD dwRead;
BOOL bRetVal;
int nError;

memset(&PropQuery, 0, sizeof(PropQuery));
PropQuery.PropertyId = StorageDeviceProperty;
PropQuery.QueryType = PropertyStandardQuery;
Info.DevDescrip.Size = sizeof(Info.DevDescrip) + sizeof(Info.bzDevDescripEx);
bRetVal = ::DeviceIoControl(hDisk, IOCTL_STORAGE_QUERY_PROPERTY, &PropQuery, sizeof(PropQuery),
&Info.DevDescrip, Info.DevDescrip.Size, &dwRead, NULL);
if(bRetVal == FALSE)
{
nError = GetLastError();
if(nError != ERROR_INVALID_FUNCTION)
assert(0);
}
if(Info.DevDescrip.VendorIdOffset)
strcpy(Info.szVendorId, (CHAR *)&Info.DevDescrip + Info.DevDescrip.VendorIdOffset);
if(Info.DevDescrip.ProductIdOffset)
strcpy(Info.szProductId, (CHAR *)&Info.DevDescrip + Info.DevDescrip.ProductIdOffset);
if(Info.DevDescrip.ProductRevisionOffset)
strcpy(Info.szProductRevision, (CHAR *)&Info.DevDescrip + Info.DevDescrip.ProductRevisionOffset);
if(Info.DevDescrip.SerialNumberOffset)
strcpy(Info.szSerialNumber, (CHAR *)&Info.DevDescrip + Info.DevDescrip.SerialNumberOffset);

memset(&PropQuery, 0, sizeof(PropQuery));
PropQuery.PropertyId = StorageAdapterProperty;
PropQuery.QueryType = PropertyStandardQuery;
Info.AdpDescrip.Size = sizeof(Info.AdpDescrip) + sizeof(Info.bzAdpDescripEx);
bRetVal = ::DeviceIoControl(hDisk, IOCTL_STORAGE_QUERY_PROPERTY, &PropQuery, sizeof(PropQuery),
&Info.AdpDescrip, Info.AdpDescrip.Size, &dwRead, NULL);
if(bRetVal == FALSE)
{
nError = GetLastError();
if(nError != ERROR_INVALID_FUNCTION)
assert(0);
}

memset(&PropQuery, 0, sizeof(PropQuery));
PropQuery.PropertyId = StorageDeviceIdProperty;
PropQuery.QueryType = PropertyStandardQuery;
Info.DevIdDescrip.Size = sizeof(Info.DevIdDescrip) + sizeof(Info.bzDevIdDescripEx);
Info.DevIdDescrip.NumberOfIdentifiers = sizeof(Info.bzDevIdDescripEx);
bRetVal = ::DeviceIoControl(hDisk, IOCTL_STORAGE_QUERY_PROPERTY, &PropQuery, sizeof(PropQuery),
&Info.DevIdDescrip, Info.DevIdDescrip.Size, &dwRead, NULL);
if(bRetVal == FALSE)
{
nError = GetLastError();
if(nError != ERROR_NOT_SUPPORTED &&
nError != ERROR_INVALID_PARAMETER &&
nError != ERROR_INVALID_FUNCTION)
assert(0);
}

return TRUE;
}


判断磁盘总线类型 BusTypeUsb
veryhehe2011 2012-08-16
  • 打赏
  • 举报
回复
help

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧