识别硬盘与U盘:基于DeviceType与BusTypeGuid的判断
2星 需积分: 9 94 浏览量
更新于2024-12-27
收藏 1KB TXT 举报
"这篇文章主要介绍了如何在低层设备过滤器驱动程序中区分硬盘和U盘驱动器。通过检查Device_Object->DeviceType属性以及利用IoGetDeviceProperty获取设备的总线类型GUID来判断设备类型。此外,还使用了特定的字符串比较来进一步确认设备是IDE硬盘还是USB存储设备。"
在Windows操作系统中,驱动程序开发人员有时需要识别连接到系统的不同类型的硬件设备,例如硬盘和U盘。为了实现这一目标,可以利用设备对象(Device_Object)中的DeviceType属性和IoGetDeviceProperty函数。DeviceType属性是一个枚举值,表示设备的类型。例如,硬盘通常具有FILE_DEVICE_DISK的值,而U盘可能有FILE_DEVICE_CD_ROM或FILE_DEVICE_USB_STORAGE等不同的值。
在驱动程序中,可以使用IoGetDeviceProperty函数获取设备的总线类型GUID。这个函数接受设备扩展(DeviceExtension)中的PhysicalDeviceObject,DevicePropertyBusTypeGuid常量,长度参数,一个指向接收GUID的缓冲区指针,以及返回值的变量。如果成功,它将返回设备总线类型的信息,这有助于确定设备是否属于USB总线。
代码示例中,首先检查DeviceType是否为FILE_DEVICE_CD_ROM,因为U盘有时会被识别为光驱类型。接着,通过RtlCompareMemory函数对比DeviceExtension->ifSymLinkName.Buffer中的符号链接名称与预定义的IDE硬盘和USB存储设备字符串。如果匹配成功,就更新DeviceExtension->DeviceType,将其设置为IDE_DISK或USBSTOR_DISK,从而明确设备的类型。
IDE_DISK_STRING和USBSTOR_DISK_STRING是预定义的字符串常量,分别对应于IDE硬盘和USB存储设备的符号链接名称。通过比较这两个字符串,我们可以确保设备是IDE接口的硬盘还是通过USB接口连接的存储设备。
总结来说,区分硬盘和U盘驱动器的关键在于理解DeviceType属性的含义,利用IoGetDeviceProperty获取总线类型,以及通过字符串比较来进一步验证设备的接口类型。这样的方法在编写底层设备过滤器驱动时尤其有用,因为它允许驱动程序根据设备类型进行特定的操作。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-11-29 上传
2008-11-16 上传
2020-08-15 上传
130 浏览量
2019-07-10 上传
2014-12-29 上传
wangjingkun9
- 粉丝: 0
- 资源: 2
最新资源
- MPU6050.zip_微处理器开发_C/C++_
- Http抓包工具.zip
- imvijayps.github.io
- passwordmanager:使用烧瓶的密码管理器
- DTCMS网站内容管理系统 v2.0 Access版
- robotframework-pyspherelibrary:围绕pysphere的包装器,添加了连接缓存
- phpSmile-开源
- 植绒蜻蜓
- HackerRank:C#JavaC ++ Python中的HackerRank解决方案
- Freelancer Helper-crx插件
- OSSU-Computer-Science-Progress:我通过OSSU CS学位取得的进步
- shuffle-deck
- ezzy-config-setup:函数的类似于Java的配置
- MZRCFC.rar_按钮控件_Borland_C++_
- TheCSharp:演示了所有有趣的CSharp语言功能
- BUSA-8090