2

のドキュメントIOCTL_MOUNTDEV_QUERY_UNIQUE_IDは少し混乱しています...構造体で返されるIDの種類は正確ですか?MOUNTDEV_UNIQUE_ID

のドキュメント

typedef struct _MOUNTDEV_UNIQUE_ID {
  USHORT  UniqueIdLength;
  UCHAR  UniqueId[1];
} MOUNTDEV_UNIQUE_ID, *PMOUNTDEV_UNIQUE_ID;

言います:

UniqueIdLength

  • 一意のボリューム ID の長さが含まれます。

UniqueId

  • 一意のボリューム ID が含まれます。一意のボリューム名の形式は です"\??\Volume{GUID}\"。GUID は、ボリュームを識別するグローバルに一意の識別子です。

ただし、ここには奇妙なことがあります: の正確な形式はUniqueId何ですか? \??\Volume{GUID}\それがフォーマットであることが意図されている場合、UniqueIdLengthフィールドのポイントは何ですか-それらはすべて同じサイズではありませんか? それ以外の場合、デバイス ID はどのような形式にする必要がありますか?

さらに、これはデバイスID ですか、それともボリュームID ですか? つまり、これはメディアごと(CD など) またはデバイス(CD ドライブ) ごとに一意であると考えられますか?

4

2 に答える 2

0

MSDNから

この構造について誤解があるかもしれません。

DeviceIoControl(IOCTL_MOUNTDEV_QUERY_UNIQUE_ID)Device Interface Path と同様の形式で文字列を呼び出して取得しましたが、プレフィックス 4 文字が異なるだけで、レジストリに保存されました\HKLM\SYSTEM\MountedDevices

于 2012-03-09T08:18:03.033 に答える
0

この種の構造体は、MS API ではかなり一般的です。UniqueID[1]変数は単なるプレースホルダーであり、実際にはUniqueId[UniqueIdLength]変数として使用されます。

ID は、メディアごととデバイスごとの両方で一意です。これは、ボリューム ドライバーと通信しているか、デバイス クラス ドライバーと通信しているかによって異なります。ID は、「マウントできるもの」を識別することを目的としています。たとえば、CD-ROM デバイス、固定ディスク パーティション、パーティション化されていないリムーバブル ディスクなどです。マウント マネージャーは ID ao を使用して、この特定のボリュームが以前にマウントされた場所を検索し、同じ時点で再マウントします。

于 2011-04-06T21:59:24.637 に答える