Dispositif de stockage USB SerialNumber de pilote minifiltre (de descripteur de périphérique USB)

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

Question

Je veux extraire un dispositif de stockage USB numéro de série à partir de l'intérieur d'un pilote de système de fichiers minifiltre, à l'intérieur de la fonction de rappel InstanceSetup selon la technique décrite ici la seule différence est que je le fais en mode noyau.
J'utilise:

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

énumérer sur les interfaces possibles (par exemple de résultat):

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

et je veux trouver que l'un d'eux est l'interface de mon volume au moyen de IOCTL_STORAGE_GET_DEVICE_NUMBER.

J'ai essayé ZwCreateFile & ZwDeviceIoControlFile mais ZwCreateFile retourne une STATUS_OBJECT_NAME_INVALID.

Comment puis-je envoyer IOCTLS à ces interfaces? Dans tout mode utilisateur est OK, mais en mode noyau, il échoue!

Était-ce utile?

La solution 2

Je résolu la question embêtante en déléguant l'informatique à un service en mode utilisateur et parler via un port. Boiteuse mais vraiment utile.

Autres conseils

Vous devriez changer \ ?? \ à \ DosDevices \ dans les noms de périphériques. Il devrait résoudre votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top