Серийный номер USB-накопителя из драйвера минифильтра (из дескриптора USB-устройства)

Я хочу извлечь серийный номер USB-накопителя из драйвера файловой системы minifilter внутри обратного вызова InstanceSetup, используя метод, описанный здесь с той лишь разницей, что я делаю это в режиме ядра.
Я использую:

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 на эти интерфейсы? В пользовательском режиме все ОК, а в режиме ядра не работает!


person clyfe    schedule 24.06.2010    source источник


Ответы (2)


Вы должны изменить \??\ на \DosDevices\ в именах устройств. Это должно решить вашу проблему.

person Community    schedule 13.07.2010

Я решил надоедливую проблему, делегировав вычисления службе пользовательского режима и разговаривая через порт. Хромой, но действительно полезный.

person clyfe    schedule 15.07.2010