IOCTL_MOUNTMGR_QUERY_POINTS IOCTL (mountmgr.h)
この IOCTL は、ボリュームの永続的なシンボリック リンク名 (マウント ポイント)、ボリュームの一意の ID、ボリュームの非永続デバイス名 ("\Device\HarddiskVolume1" など) で構成されるトリプルを返します。 この IOCTL への入力は、1 つのトリプルを含む MOUNTMGR_MOUNT_POINT 構造体です。
入力トリプルに一意の ID または非永続的なデバイス名が含まれている場合、要求は、ボリューム GUID パス名とドライブ文字を含む、関連付けられているすべてのマウント ポイント (シンボリック リンク) を取得します。 ただし、入力トリプルにシンボリック リンクがあり、一意の ID またはデバイス名を指定していない場合、要求は、入力で指定されたシンボリック リンクを含む 1 つのトリプルと、一意の ID とデバイス名のみを返します。 呼び出し元は、残りのマウント ポイントを取得するために、一意の ID またはデバイス名を持つ別の IOCTL を送信する必要があります。
入力トリプルが空の場合、マウント・マネージャーはマウントされたデバイス・リスト全体を戻します。
マウント マネージャーは、呼び出し元が提供する情報と同じ数の情報に一致する 3 つを返します。 呼び出し元が一意の ID を送信すると、マウント マネージャーはその一意の ID を持つすべてのトリプルを返します。 呼び出し元がシンボリック・リンク名としてボリューム・パス名またはドライブ文字を入力した場合、マウント・マネージャーはシンボリック・リンクのトリプルのみを戻します。 シンボリック リンクごとに 1 つのエントリがあります。 呼び出し元がデバイス パス名を入力した場合、マウント マネージャーはそのデバイス パス名の 3 つのみを返します。 呼び出し元が一意の ID とシンボリック リンクを入力した場合も、マウント マネージャーはそのシンボリック リンクのエントリを 1 つだけ返します。 呼び出し元はこれを行って、デバイスのパス名を取得します。 呼び出し元がデバイス パス名、一意の ID、またはシンボリック リンクを入力しなかった場合、マウント マネージャーはすべてのエントリ/トリプルを返します。
メジャー コード
入力バッファー
マウント マネージャー クライアントは、バッファーの先頭にある MOUNTMGR_MOUNT_POINT 構造体 Irp->AssociatedIrp.SystemBuffer初期化します。 この構造の直後に、MM クライアントはシンボリック リンク名、一意の ID、デバイス名をその順序で読み込みます。
入力バッファーの長さ
IRP の I/O スタック位置の Parameters.DeviceIoControl.InputBufferLength は、入力バッファーのサイズ (バイト単位) を示します。これは、sizeof(MOUNTMGR_MOUNT_POINT)
以上である必要があります。
出力バッファー
マウント マネージャーは、バッファーの先頭にある MOUNTMGR_MOUNT_POINTS 型の可変長構造体 Irp->AssociatedIrp.SystemBuffer初期化します。 マウント マネージャーは、指定されたボリュームに関連付けられたマウント ポイントを、この構造体の MountPoints[] メンバーが指すアドレスに挿入します。 各マウント ポイントは、この IOCTL の Input セクションで定義されているMOUNTMGR_MOUNT_POINT構造体によって表されます。
出力バッファーの長さ
IRP の I/O スタック位置の Parameters.DeviceIoControl.OutputBufferLength は、出力バッファーのサイズ (バイト単位) を示します。これは、sizeof(MOUNTMGR_MOUNT_POINTS)
以上である必要があります。
入力/出力バッファー
N/A
入力/出力バッファーの長さ
N/A
状態ブロック
操作が成功した場合、状態 フィールドはSTATUS_SUCCESSに設定されます。
ボリューム・マウント・デバイス・リストに固有 ID も非永続装置名も見つからない場合、状況 フィールドはSTATUS_INVALID_PARAMETERに設定されます。
InputBufferLength が sizeof(MOUNTMGR_MOUNT_POINT)
未満の場合、状態 フィールドはSTATUS_INVALID_PARAMETERに設定されます。
InputBufferLength が 3 つの入力 ID 文字列の合計長より小さい場合、Status フィールドは STATUS_INVALID_PARAMETER に設定されます。
OutputBufferLength が sizeof(MOUNTMGR_MOUNT_POINT)
未満の場合、状態 フィールドはSTATUS_INVALID_PARAMETERに設定されます。
OutputBufferLength が sizeof(MOUNTMGR_MOUNT_POINTS)
とマウント ポイントの 3 倍のサイズの合計より小さい場合、Status フィールドは STATUS_BUFFER_OVERFLOW に設定されます。
いずれかのトリプルに含まれる 3 つの文字列のいずれかが奇数のアドレス (例: address & 01 != 0) に配置されている場合、Status フィールドは STATUS_INVALID_PARAMETER に設定されます。
備考
詳細については、「記憶域クラス ドライバー でのマウント マネージャー要求のサポート」を参照してください。
必要条件
要件 | 価値 |
---|---|
ヘッダー | mountmgr.h (Mountmgr.h を含む) |