我想从minifilter文件系统驱动程序内部使用描述here所述的技术从InstanceSetup回调中提取USB存储设备序列号,唯一的区别是我在内核模式下执行此操作。 我用:
status = IoGetDeviceInterfaces(
&GUID_DEVINTERFACE_DISK,
NULL,
0,
&SymbolicLinkList
);
枚举可能的接口(示例结果):
\??\SCSI#Disk&Ven_VMware_&Prod_VMware_Virtual_S&Rev_1.0#4&5fcaafc&0&000#{53f56307 -b6bf-11d0-94f2-00a0c91efb8b}
\??\USBSTOR#Disk&Ven_Kingston&Prod_DataTraveler_C10&Rev_1.00#001D92AD7568F030E3CC 0AFC&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
\??\USBSTOR#Disk&Ven_USB_2.0&Prod_Flash_Disk&Rev_1100#AA04012700007777&0#{53f5630 7-b6bf-11d0-94f2-00a0c91efb8b}
我希望通过IOCTL_STORAGE_GET_DEVICE_NUMBER找到其中哪一个是我的卷的界面。
我尝试过ZwCreateFile& ZwDeviceIoControlFile但ZwCreateFile返回STATUS_OBJECT_NAME_INVALID。
如何将IOCTLS发送到这些接口?在用户模式下一切正常,但在内核模式下它会失败!
答案 0 :(得分:0)
您应该在设备名称中将\ ?? \更改为\ DosDevices \。它应该可以解决你的问题。
答案 1 :(得分:0)
我通过将计算委托给用户模式服务并通过端口进行通信来解决了这个棘手的问题。 Lame但真的很有用。