USB SerialNumber dispositivo de almacenamiento del controlador minifiltro (de descriptor de dispositivo USB)

StackOverflow https://stackoverflow.com/questions/3110046

Pregunta

I desea extraer un número de serie del dispositivo de almacenamiento USB desde el interior de un conductor minifiltro sistema de archivos, en el interior de la devolución de llamada InstanceSetup usando la técnica descrita aquí la única diferencia es que lo hago en modo núcleo.
Yo uso:

status = IoGetDeviceInterfaces( 
    &GUID_DEVINTERFACE_DISK, 
    NULL, 
    0, 
    &SymbolicLinkList
);

para enumerar sobre posibles interfaces (ejemplo resultado):

\??\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}

y quiero encontrar cuál de ellas es la interfaz de mi volumen por medio de IOCTL_STORAGE_GET_DEVICE_NUMBER.

He intentado ZwCreateFile y ZwDeviceIoControlFile pero ZwCreateFile devuelve una STATUS_OBJECT_NAME_INVALID.

¿Cómo puedo enviar IOCTLS a estas interfaces? En modo de usuario que todo está bien, pero en modo kernel falla!

¿Fue útil?

Solución 2

Me solucionó el problema molesto al delegar la computación a un servicio en modo de usuario y hablando a través de un puerto. Escaso, pero realmente útil.

Otros consejos

Se debe cambiar \ ?? \ a \ DosDevices \ en los nombres de los dispositivos. Se debe resolver su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top