Terrorist
驱动牛犊
驱动牛犊
  • 注册日期2003-02-21
  • 最后登录2005-05-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1806回复:5

驱动中如何判断盘符的类型呀?

楼主#
更多 发布于:2005-05-30 08:42
驱动中已经得到了盘符,用什么函数可以判断该盘符的类型?dist还是romove之类的,谢谢
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-30 18:58
关注:)
lgh41
驱动小牛
驱动小牛
  • 注册日期2004-12-14
  • 最后登录2006-09-24
  • 粉丝0
  • 关注0
  • 积分203分
  • 威望28点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-06 10:54
Terrorist
    您是如何取得盘符的,我们好多人只能在引导的短时间取得盘符,您给大家介绍一下好吗?
lgh41
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-18 09:30
驱动中已经得到了盘符,用什么函数可以判断该盘符的类型?dist还是romove之类的,谢谢


我是应用层解析时才做的这个判断动作。
U盘用getdrivetype也会是DRIVE_FIXED,因此需要额外判断。


_stprintf( name, _T(\"%c:\\\\\"),  \'f\');
switch ( GetDriveType(name) )
{
// We don\'t like these: remove them
case 0: // The drive type cannot be determined.
case 1: // The root directory does not exist.
printf(_T(\"Unkown:\"));
break;
case DRIVE_REMOVABLE: // The drive can be removed from the drive.
printf(_T(\"removable:\"));
break;

// We like these types
case DRIVE_CDROM: // The drive is a CD-ROM drive.
printf(_T(\"cdrom:\"));
break;
case DRIVE_FIXED: // The disk cannot be removed from the drive.
if(IsDriveUDisk(\'f\')) {
printf(_T(\"udisk:\"));
}
else
{
printf(_T(\"fixed:\"));
}
break;
case DRIVE_REMOTE: // The drive is a remote (network) drive. // 映射的盘符
printf(_T(\"remote:\"));
break;
case DRIVE_RAMDISK: // The drive is a RAM disk.
printf(_T(\"ramdisk:\"));
break;

default:
printf(_T(\"Unkown:\"));
break;
}


BOOL IsDriveUDisk(char letter)
{
TCHAR name[20];
HANDLE hFile;
DWORD nb;
UCHAR in[1024];
UCHAR out[1024];
STORAGE_PROPERTY_QUERY *pQuery;
STORAGE_DEVICE_DESCRIPTOR *pDeviceDesc;

_stprintf( name, _T(\"\\\\\\\\.\\\\%c:\"),  letter);
hFile = CreateFile(name, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return FALSE;

pQuery = (STORAGE_PROPERTY_QUERY *)in;
pQuery->PropertyId = StorageDeviceProperty;
pQuery->QueryType =  PropertyStandardQuery;
// 发送 IOCTL_STORAGE_QUERY_PROPERTY 即可得到是否为 USB HD
if( DeviceIoControl(hFile, IOCTL_STORAGE_QUERY_PROPERTY,
in, 1024, out, 1024, &nb, NULL) )
{
pDeviceDesc = (STORAGE_DEVICE_DESCRIPTOR *)out;
if(pDeviceDesc->BusType == BusTypeUsb)
{
CloseHandle(hFile);
return TRUE;
}
}

CloseHandle(hFile);

return FALSE;
}
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-18 09:32
Terrorist
    您是如何取得盘符的,我们好多人只能在引导的短时间取得盘符,您给大家介绍一下好吗?


你是用SFILTER么?
感觉还是传到应用层来解析更方便一些。正在试。
lgh41
驱动小牛
驱动小牛
  • 注册日期2004-12-14
  • 最后登录2006-09-24
  • 粉丝0
  • 关注0
  • 积分203分
  • 威望28点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-18 10:06
[quote]Terrorist
    您是如何取得盘符的,我们好多人只能在引导的短时间取得盘符,您给大家介绍一下好吗?


你是用SFILTER么?
感觉还是传到应用层来解析更方便一些。正在试。 [/quote]

yunyanrong:
我是用SFILTER;我也正在试,待有结果时我们交流一下好吗?
lgh@mobileelife.com
lgh41
游客

返回顶部