1

よし、一意のドライブ ID (シリアル番号?) を取得して、ID をいくつかのファイルに関連付けるデータベースに入れることができるプログラムを作成しようとしています。フラッシュドライブ (ドライブ文字を変更できる) のようなものでファイルを見つけたい場合は、フラッシュドライブを接続し、プログラムがその一意の ID をスキャンし、stl::map などに基づいてファイルを検索し、ドライブ文字に固有の ID。

プログラムはパーティションも(明らかに)認識する必要があるため、おそらくデバイス上の一意のID +パーティション番号です。

これについてどうすればよいかについてのアイデアはありますか?EnumDisk のソース コード (Windows コード サンプル) を見ていますが、含まれているデモ .exe は Windows 7 では動作しないようです (ソースから再ビルドしなくても互換性があるとのことでした)。

テイカーはいますか?

PS 私は ENumDisk.exe からこのエラーを受け取ります 'CreateFile failed with error: 5'

PSS ああ、プログラムが他のファイル システムのドライブをスキャンしてシリアル IDを取得できるようにしたいのです。それが難しい注文であることはわかっていますが、これが私の最終的な目標です。

4

2 に答える 2

3

幸運です。Windows (特にマウント マネージャー) は、一意のボリューム識別子のデータベースを保持しています。ボリューム管理 APIを見てください。

たとえば、GetVolumeNameForVolumeMountPointを使用して、リムーバブル ボリュームであっても、特定のマウント ポイント (ドライブ文字を含む) の一意の識別子を取得できます。または、ボリュームは複数のマウント ポイントを持つことができるため、FindFirst/NextVolumeMountpointを使用して、特定のボリューム ID (GUID) のマウントポイントを列挙できます。

楽しむ!

于 2012-11-29T04:37:45.460 に答える
1

エラー 5 はアクセスが拒否されました。これは、非管理者として実行している可能性が高いことを意味します。物理ドライブを開こうとしている場合は、「dwDesiredAccess」パラメーターを 0 に設定することで回避できる場合があります。デバイスを開くことに成功する場合もありますが、返されたハンドルを使用する API 関数によっては、後の操作が失敗する場合があります。と。

パーティション情報の取得については、MSDN の IOCTL_DISK_GET_DRIVE_LAYOUT を参照してください。 microsoft.com/en-us/library/windows/desktop/aa365179(v=vs.85).aspx

Windows が認識しないファイルシステムに属するものも含め、すべてのパーティションを収集できます。

于 2012-11-29T04:37:36.447 に答える