IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)
この IOCTL は、指定されたアドレス指定可能コマンド ターゲット (ACT) に関連付けられているすべてのアクティブな記憶域物理デバイス オブジェクト (PDO) の列挙を含む結果セットを返します。 クライアントは、次の方法でこの IOCTL を発行することによって、必要なバッファー サイズを最初にプローブできます。
DeviceIoControl(
hDevice,
IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS,
&pdoType,
sizeof(PDO_TYPE),
NULL,
0,
&dwBytesRequired,
NULL );
出力バッファー パラメーターを NULL に設定すると、I/O マネージャーは IRP フラグのIRP_INPUT_OPERATION ビットをクリアします。 これを検出すると、ストレージ サイロ ドライバーは IoStatus.Information を必要なバッファー サイズに安全に設定し、クライアントに示すことができます。
これは、STATUS_BUFFER_OVERFLOW (0x80000005) が、I/O マネージャーが IoStatus.Information を lpBytesReturned パラメーターにコピーし、その値をクライアントに返すNT_WARNING() 値であるためにのみ機能します。
ここでは、IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOSが METHOD_BUFFERED で定義されているため、I/O マネージャーはこのバイト数を出力バッファーにコピーしようとするため、注意が必要です。
メジャー コード
[入力バッファー]
Irp-AssociatedIrp.SystemBuffer> の入力バッファーには、 PDO_TYPEで定義されている ULONG 値が含まれている必要があります。
ここで、指定されたPDO_TYPE入力値に従って、すべての PDO、ディスク PDO、コントロール PDO、またはすべてのサイロ PDO が列挙されます。
入力バッファーの長さ
ULONG の長さ。
出力バッファー
Irp-AssociatedIrp.SystemBuffer> は、PDO 列挙結果を受け取るバッファーを指します。 クライアントが発行された IOCTL で NULL 以外のバッファーを指定した場合、ドライバーは、Parameters.DeviceIoControl.The 戻り値が STATUS_SUCCESSバッファー サイズで十分で、結果がバッファーにコピーされている場合にのみ、結果セットを入力します。 それ以外の場合はSTATUS_INVALID_BUFFER_SIZEが返され、出力バッファーは変更されません。
返される列挙バッファーには、次の規則に従って構造化された結果セットが含まれています。 バッファー内の先頭の構造体 (ENUM_PDO_RESULTS) は、構造体数と ENUM_PDO_ENTRY 構造体の配列で構成されます。
出力バッファーの長さ
OutputBufferLength は、結果セット全体を含めるのに十分な長さのバッファー サイズを示します。
ステータス ブロック
[状態] フィールドには、次のいずれかの値が返される場合があります。
- STATUS_SUCCESS - 出力バッファーには、要求された PDO の列挙が含まれています。
- STATUS_BUFFER_OVERFLOW - Information フィールドは、列挙結果セットの出力全体を格納するために必要なバッファー サイズに設定されます。
- STATUS_INVALID_BUFFER_SIZE - 指定された出力バッファーの長さが、列挙結果セットの出力全体を含むには不十分です。
要件
要件 | 値 |
---|---|
Header | ehstorioctl.h (EhStorIoctl.h を含む) |