USB NumeroSerie dispositivo di memorizzazione al driver mini-filtro (da descrittore dispositivo USB)

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

Domanda

voglio estrarre un numero di serie del dispositivo di memorizzazione USB dall'interno un driver mini-filtro file system, all'interno del callback InstanceSetup utilizzando la tecnica descritta qui l'unica differenza è che lo faccio in modalità kernel.
Io uso:

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

enumerare mediante interfacce possibili (esempio risultato):

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

e voglio trovare quale uno di loro è l'interfaccia del mio volume mediante IOCTL_STORAGE_GET_DEVICE_NUMBER.

Ho cercato ZwCreateFile & ZwDeviceIoControlFile ma ZwCreateFile restituisce uno STATUS_OBJECT_NAME_INVALID.

Come posso inviare IOCTL a queste interfacce? In modalità utente tutto è OK, ma in modalità kernel non riesce!

È stato utile?

Soluzione 2

ho risolto il problema fastidioso delegando il computing per un servizio in modalità utente e parlare attraverso una porta. Lame ma veramente utile.

Altri suggerimenti

Si dovrebbe cambiare \ ?? \ a \ DosDevices \ nei nomi dei dispositivi. Dovrebbe risolvere il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top