2

私は Windows API をいじり回しており (WMI は信頼できないため、WMI には近づかないように言われています)、HD と接続された USB デバイスのデバイス シリアル番号を取得しようとしています。しかし、機能の大部分は、デバイスの実際の製造元固有のシリアル番号ではなく、ボリューム シリアル ID にアクセスするように設計されているようです。これらのボリューム シリアルは、ドライブが最後にフォーマットされた日時に基づいて計算されているようです。

まあ、これは私が開発したいアプリケーションには適していません - デバイスがフォーマットされていて、同じ情報がそのデバイスにコピーされている場合、彼らが私のアプリケーションを起動したときに、内部情報を処理できる必要があります (ボリューム シリアル ID を使用すると失われます。

http://www.winsim.com/diskid32/のコードを見ましたが、ボリュームのシリアル ID を返すだけのようです。編集: 実際には、以下の出力でわかるように、この値はボリューム シリアルとは異なります。

Vol Name is Hellblazer
Vol Serial is 3358611714
Max Filelength is 255 chars
Filesystem is NTFS

202020202020202020205a204339464a38305345
Z9CJF08ES

コードの最初のビット (GetVolumeInformation を使用) のシリアルは、コマンド プロンプトで「vol」と入力したときに取得したドライブの 16 進数値の 10 進数バージョンです。つまり、これがボリューム シリアルです。以下の数値は から返されるものDeviceIoControl(hwDrive, IOCTL_STORAGE_QUERY_PROPERTY...です。これは、 diskid32のプログラマーが私のドライブ用に取得した ID と同じですが、以下の実際のシリアル番号とは異なります。困惑。

USB ドライブの場合:PSP_DEVICE_INTERFACE_DETAIL_DATA構造体を使用して、USB ドライブの場合は次のような GUID デバイス列挙にアクセスできます。

\?\usbstor#disk&ven_toshiba&prod_mk5059gsxp&rev_gn00#203216187542_ _ &0#{53f563 07-b6bf-11d0-94f2-00a0c91efb8b}

そのデバイス情報のこの部分はシリアルであり、おそらく次のとおりです。

203216187542_ _

さらに、diskpart.exe (コマンド ライン パーティション プログラム) をロードし、システム HDD と外部 USB ドライブのドライブの詳細を確認しましたが、どちらも上記の値と一致しませんでした。

東芝 MK5055GSXF ATA デバイス ディスク ID: 00005B9E

東芝 MK5059GSXP USB デバイス ディスク ID: 51260D08

ここで何が起こっているのでしょうか?実際のデバイスの実際の製造シリアル番号にアクセスするには、どこで、どのようにすればよいですか?

どんな助けでも大歓迎です!

4

0 に答える 0