0

ここで説明する手法を使用して、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 を送信するにはどうすればよいですか? ユーザーモードではすべて問題ありませんが、カーネルモードでは失敗します!

4

2 に答える 2

0

デバイス名の \??\ を \DosDevices\ に変更する必要があります。それはあなたの問題を解決するはずです。

于 2010-07-13T13:13:25.690 に答える
0

コンピューティングをユーザー モード サービスに委任し、ポートを介して通信することで、厄介な問題を解決しました。ラメですが、本当に便利です。

于 2010-07-15T15:29:29.473 に答える