怎么识别插入后变成“本地磁盘”的u盘?
如何识别插入后变成“本地磁盘”的u盘??求助
因为什么CF卡的缘故,致使插入的u盘都变成“本地磁盘”了,因我写的一个程序是从u盘中自动拷贝,所以我的这个程序在这种情况下无法实现这个功能了,请问哪位大侠可以帮我解决这个问题一下??谢谢
------解决方案--------------------
因为什么CF卡的缘故,致使插入的u盘都变成“本地磁盘”了,因我写的一个程序是从u盘中自动拷贝,所以我的这个程序在这种情况下无法实现这个功能了,请问哪位大侠可以帮我解决这个问题一下??谢谢
------解决方案--------------------
- C/C++ code
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; }