根据盘符判断是不是U盘

wxz 2005-11-11 03:22:23
根据一个盘符,怎样判断是不是U盘?

注意:GetDiskType不准确,有些U盘把自己报告为硬盘,我手头就一个这样的。
...全文
474 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
truelove7283159 2006-06-12
  • 打赏
  • 举报
回复
TO: xingzhou(往事悠悠,网事幽幽)
你在这个帖子中问我的问题,cfg.h是ddk中的头文件。

xingzhou 2005-11-13
  • 打赏
  • 举报
回复
这个帖子早结了,怎么还是未解决?

-----------------
行舟
欢迎使用CSDN论坛浏览器
http://blog.csdn.net/xingzhou/
Joe 2005-11-13
  • 打赏
  • 举报
回复
请再寄给我一下: liweiqiao@126.com
谢谢!
wf2091139 2005-11-12
  • 打赏
  • 举报
回复
UP一下,便与学习!
wxz 2005-11-11
  • 打赏
  • 举报
回复
非常感谢,另分10分给了感兴趣的朋友,不要见怪。
truelove7283159 2005-11-11
  • 打赏
  • 举报
回复
已发邮件
ccrun.com 2005-11-11
  • 打赏
  • 举报
回复
info@ccrun.com
constantine 2005-11-11
  • 打赏
  • 举报
回复
constantine.student@sina.com
非常感谢!
xingzhou 2005-11-11
  • 打赏
  • 举报
回复
非常感谢,wxz@csdn.net

-----------------
行舟
CSDN论坛浏览器
http://blog.xingzhou.com
http://blog.csdn.net/xingzhou/
truelove7283159 2005-11-11
  • 打赏
  • 举报
回复
不好意思,有点乱给我mail吧。发给你们
truelove7283159 2005-11-11
  • 打赏
  • 举报
回复
int iCount;
DWORD drive;
TCHAR cDriverPath,szBuf[300],szDrvName[33];

HANDLE hDevice;
PSTORAGE_DEVICE_DESCRIPTOR pDevDesc;
AnsiString pDriverPath;

BYTE pByte[STORAGE_DEVICE_DESCRIPTOR_SIZE];

memset(szDrvName,0x00,33);
memset(szBuf,0x00,300);

//ロジカル全ドライブを取得する
DWORD MaxDriveSet;
MaxDriveSet = GetLogicalDrives();

if(DriveList == NULL)
return 0;
//DriveListOld = DriveList;
DriveList->Clear();

//システムのusbロジックディスク
for ( drive = 0; drive < 32; ++drive )
{
if ((MaxDriveSet & (1 << drive)) != 0 )
{
DWORD tempDrive = 1<<drive;
sprintf( szDrvName, "%c:\\", 'A'+drive );
if((GetDriveType( szDrvName )== DRIVE_REMOVABLE)
||(GetDriveType( szDrvName )== DRIVE_FIXED)
||(GetDriveType( szDrvName )== DRIVE_CDROM))
{
sprintf(szBuf, "\\\\?\\%c:", 'A'+drive);
hDevice = CreateFile(szBuf,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
NULL,
NULL);

//ディスク属性の取得は、総線タイプにより、usbディバイスであるかを判明してから
if (hDevice != INVALID_HANDLE_VALUE)
{
memset(pByte,0x00,STORAGE_DEVICE_DESCRIPTOR_SIZE); //*A02*CH04*
pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)pByte; //*A02*CH04*
pDevDesc->Size = STORAGE_DEVICE_DESCRIPTOR_SIZE; //*A02*CH04*

if(GetDisksProperty(hDevice, pDevDesc))
{
if(pDevDesc->BusType == BusTypeUsb)
{
pDriverPath = FirstDriveFromMask(tempDrive);
pDriverPath +=":\\";
DriveList->Add(pDriverPath);
}
}
CloseHandle(hDevice);
}
}
}
}

iCount = DriveList->Count;

return iCount;

//=====================================================
BOOL __fastcall TNnUSBWatch::GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc)
{
DWORD dwOutBytes;
BOOL bResult;
STORAGE_PROPERTY_QUERY Query;
memset(&Query, 0, sizeof(Query));
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;

if(hDevice == INVALID_HANDLE_VALUE)
return false;
if(pDevDesc == NULL)
return false;

bResult = DeviceIoControl(hDevice,
IOCTL_STORAGE_QUERY_PROPERTY,
&Query, sizeof(STORAGE_PROPERTY_QUERY),
pDevDesc, pDevDesc->Size,
&dwOutBytes,
(LPOVERLAPPED)NULL);

return bResult;
}

看GetDisksProperty方法
xingzhou 2005-11-11
  • 打赏
  • 举报
回复
to truelove7283159:
那怎样取到这个盘的总线类型呢?
truelove7283159 2005-11-11
  • 打赏
  • 举报
回复
根据一个盘符,判断是不是U盘,要读取到这个盘的总线类型才可以知熬是不是u盘。
bustype == usb

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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