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_MJ_DEVICE_CONTROL

[入力バッファー]

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 を含む)