znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
阅读:2579回复:9

在文件驱动程序中检测是否是U盘[转自网络]

楼主#
更多 发布于:2009-04-14 23:03
ULONG GetStorageDeviceBusType(IN PDEVICE_OBJECT DeviceObject)
{
   PIRP NewIrp;
   PSTORAGE_DEVICE_DESCRIPTOR Descriptor;
   STORAGE_PROPERTY_QUERY Query;
   CHAR Buffer[BUFFER_SIZE];
   KEVENT WaitEvent;
   NTSTATUS Status;
   IO_STATUS_BLOCK IoStatus;

   // first set the query properties
   Query.PropertyId = StorageDeviceProperty;
   Query.QueryType = PropertyStandardQuery;

   // initialize the waitable event
   KeInitializeEvent(&WaitEvent, NotificationEvent, FALSE);

   // we should build the query irp ourselves
   NewIrp = IoBuildDeviceIoControlRequest(IOCTL_STORAGE_QUERY_PROPERTY, DeviceObject,
       (PVOID)&Query, sizeof(Query), (PVOID)Buffer, NAME_BUFFER_SIZE, FALSE, &WaitEvent,

&IoStatus);

   if (NULL == NewIrp)    // can't create new irp
   {
       DbgPrint("[%s] [%u] I can't create a new irp to query the property of device (%p)!\n",
           __FILE__, __LINE__, DeviceObject);
       return BusTypeUnknown;
   }

   // send this irp to the storage device
   Status = IoCallDriver(DeviceObject, NewIrp);

   if (Status == STATUS_PENDING)
   {
       Status = KeWaitForSingleObject(&WaitEvent, Executive, KernelMode, FALSE, NULL);
       Status = IoStatus.Status;
   }
      
   if (!NT_SUCCESS(Status))
   {
       DbgPrint("[%s] [%u] Query IOCTL_STORAGE_QUERY_PROPERTY of device (%p) failed, Status=0x%

08X!\n",
           __FILE__, __LINE__, DeviceObject, Status);
       return BusTypeUnknown;
   }

   Descriptor = (PSTORAGE_DEVICE_DESCRIPTOR)Buffer;
   return Descriptor->BusType;
}

若本函数返回BusType=3是一般硬盘,BusType=7是USB接口设备。

http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2009-04-14 23:03
以前一直用这个ioctl代码在应用层测试是否是u盘,偶然间找到这么一段写好的代码,大家用得着就用吧
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
板凳#
发布于:2009-04-14 23:05
具体的其它所有类型如下:


// 存储设备的总线类型
typedef enum _STORAGE_BUS_TYPE {
    BusTypeUnknown = 0x00,
    BusTypeScsi,
    BusTypeAtapi,
    BusTypeAta,
    BusType1394,
    BusTypeSsa,
    BusTypeFibre,
    BusTypeUsb,
    BusTypeRAID,
    BusTypeMaxReserved = 0x7F
} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-04-14 23:28
不错,但是 已经有人发过了
HiRong
驱动牛犊
驱动牛犊
  • 注册日期2009-04-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-04-19 18:29
谢谢分享,正在找这方面的资料呢!
HiRong
驱动牛犊
驱动牛犊
  • 注册日期2009-04-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-04-19 19:37
这函数我添加到我的代码中,一使用就出现蓝屏,有人知道是什么原因吗?
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
6楼#
发布于:2009-04-20 16:11
a bug,you can fix it yourself.
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
catface
驱动小牛
驱动小牛
  • 注册日期2009-01-11
  • 最后登录2014-03-09
  • 粉丝1
  • 关注1
  • 积分155分
  • 威望1341点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分2分
7楼#
发布于:2011-03-17 09:52
好东西 正用得着 谢谢了
molige
驱动牛犊
驱动牛犊
  • 注册日期2010-12-02
  • 最后登录2011-08-15
  • 粉丝0
  • 关注1
  • 积分66分
  • 威望171点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2011-03-17 17:31
不是完整的
fatepro
驱动牛犊
驱动牛犊
  • 注册日期2011-05-12
  • 最后登录2011-09-07
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望681点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2011-05-14 22:23
学习了
游客

返回顶部