IOCTL_MOUNTDEV_QUERY_DEVICE_NAME IOCTL (mountmgr.h)
この IOCTL を受信すると、クライアント ドライバーはボリュームの (非永続) デバイス (またはターゲット) 名を指定する必要があります。 マウント マネージャーは、クライアントからシンボリック リンクのターゲットとして返 デバイス名を使用します。 デバイス名の例として、"\Device\HarddiskVolume1" があります。
マウント マネージャー クライアントによるこの IOCTL のサポートは必須です。
メジャー コード
入力バッファー
何一つ。
入力バッファーの長さ
何一つ。
出力バッファー
マウント マネージャー クライアントは、バッファーの先頭にある MOUNTDEV_NAME 型の可変長構造体 Irp->AssociatedIrp.SystemBufferを返します。 デバイス名は、この構造体の Name メンバーが指すアドレスに挿入する必要があります。
出力バッファーの長さ
IRP の I/O スタック位置の Parameters.DeviceIoControl.OutputBufferLength は、出力バッファーのサイズ (バイト単位) を示します。これは、sizeof(MOUNTDEV_NAME)
以上である必要があります。
状態ブロック
Information フィールドは、FIELD_OFFSET(MOUNTDEV_NAME, Name) + output->NameLength に設定するか、または出力 ->NameLength + sizeof(USHORT) に設定されます。出力は、Irp->AssociatedIrp.SystemBuffer のバッファーポイントします。
操作が成功した場合、マウント・マネージャー・クライアントは、情報 フィールドを、装置名を含む NULL で終わるストリングの長さに設定し、状況 フィールドをSTATUS_SUCCESSに設定する必要があります。
出力バッファーが小さすぎてデバイス名を保持するには、マウント・マネージャー・クライアントは 情報 フィールドを sizeof(MOUNTDEV_NAME)
に設定し、状況 フィールドをSTATUS_BUFFER_OVERFLOWする必要があります。 さらに、マウント マネージャー クライアントは、MOUNTDEV_NAME 構造体の NameLength メンバーを入力します。
備考
ベスト プラクティスとして、実装者はスレッド同期を行ってはならないし、ブロックやプロセス間通信 (IPC) 関数呼び出しを行ってはなりません。
詳細については、「記憶域クラス ドライバー でのマウント マネージャー要求のサポート」を参照してください。
必要条件
要件 | 価値 |
---|---|
ヘッダー | mountmgr.h (Mountmgr.h を含む) |