IOCTL_MOUNTMGR_QUERY_POINTS IOCTL (mountmgr.h)

この IOCTL は、ボリュームの永続的なシンボリック リンク名 (マウント ポイント)、ボリュームの一意の ID、ボリュームの非永続デバイス名 ("\Device\HarddiskVolume1" など) で構成されるトリプルを返します。 この IOCTL への入力は、1 つのトリプルを含む MOUNTMGR_MOUNT_POINT 構造体です。

入力トリプルに一意の ID または非永続的なデバイス名が含まれている場合、要求は、ボリューム GUID パス名とドライブ文字を含むすべての関連付けられているマウント ポイント (シンボリック リンク) を取得します。 ただし、入力トリプルにシンボリック リンクがあり、一意の ID またはデバイス名を指定していない場合、要求は、一意の ID とデバイス名と共に、入力で提供されたシンボリック リンクを含む 1 つのトリプルのみを返します。 呼び出し元は、残りのマウント ポイントを取得するために、一意の ID またはデバイス名を持つ別の IOCTL を送信する必要があります。

入力トリプルが空の場合、マウント・マネージャーはマウントされた装置リスト全体を戻します。

マウント マネージャーは、呼び出し元が提供する情報と同じ量の情報に一致するトリプルを返します。 呼び出し元が一意の ID を送信すると、マウント マネージャーはその一意の ID を持つすべてのトリプルを返します。 呼び出し元がシンボリック・リンク名としてボリューム・パス名またはドライブ文字を入力した場合、マウント・マネージャーはシンボリック・リンクのトリプルのみを戻します。 シンボリック リンクごとに 1 つのエントリがあります。 呼び出し元がデバイス パス名を入力した場合、マウント マネージャーは、そのデバイス パス名のトリプルのみを返します。 呼び出し元が一意の ID とシンボリック リンクを入力した場合も、マウント マネージャーはそのシンボリック リンクのエントリを 1 つだけ返します。 呼び出し元は、デバイスのパス名を取得するためにこれを行います。 呼び出し元がデバイス パス名、一意の ID、またはシンボリック リンクを入力しない場合、マウント マネージャーはすべてのエントリ/トリプルを返します。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

マウント マネージャー クライアントは、Irp-AssociatedIrp.SystemBuffer> のバッファーの先頭にある Mountmgr.h で定義されているMOUNTMGR_MOUNT_POINT構造体を初期化します。 この構造の直後に、MM クライアントはシンボリック リンク名、一意の ID、デバイス名をその順序で読み込みます。

入力バッファーの長さ

IRP の I/O スタック位置の Parameters.DeviceIoControl.InputBufferLength は、入力バッファーのサイズ (バイト単位) を示します。これは sizeof(MOUNTMGR_MOUNT_POINT) 以上である必要があります。

出力バッファー

マウント マネージャーは、Irp-AssociatedIrp.SystemBuffer> のバッファーの先頭にある Mountmgr.h で定義されているMOUNTMGR_MOUNT_POINTS型の可変長構造体を初期化します。 マウント マネージャーは、指定されたボリュームに関連付けられているマウント ポイントを、この構造体の MountPoints[] メンバーが指すアドレスに挿入します。 各マウント ポイントは、この IOCTL の 入力 セクションで定義されているMOUNTMGR_MOUNT_POINT構造で表されます。

ステータス ブロック

操作が成功した場合、[ 状態] フィールドはSTATUS_SUCCESSに設定されます。

ボリューム・マウントされた装置リストに固有 ID も非永続装置名も見つからない場合、 状況 フィールドはSTATUS_INVALID_PARAMETERに設定されます。

InputBufferLengthsizeof(MOUNTMGR_MOUNT_POINT) より小さい場合、Status フィールドはSTATUS_INVALID_PARAMETERに設定されます。

InputBufferLength が 3 つの入力 ID 文字列の合計長より小さい場合、Status フィールドはSTATUS_INVALID_PARAMETERに設定されます。

OutputBufferLengthsizeof(MOUNTMGR_MOUNT_POINT) より小さい場合、Status フィールドはSTATUS_INVALID_PARAMETERに設定されます。

OutputBufferLengthsizeof(MOUNTMGR_MOUNT_POINTS) とマウント ポイントの 3 倍のサイズの合計より小さい場合、Status フィールドはSTATUS_BUFFER_OVERFLOWに設定されます。

トリプルに含まれる 3 つの文字列のいずれかが奇数のアドレス (たとえば、アドレス & 01 != 0) に配置されている場合、 Status フィールドはSTATUS_INVALID_PARAMETERに設定されます。

要件

要件
Header mountmgr.h (Mountmgr.h を含む)

こちらもご覧ください

MOUNTMGR_MOUNT_POINTS