次の方法で共有


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 - 情報フィールドは、列挙結果セットの出力全体を格納するために必要なバッファー サイズに設定されます。
STATUS_INVALID_BUFFER_SIZE - 指定された出力バッファーの長さは、列挙結果セットの出力全体を含むには不十分です。

必要条件

要件 価値
ヘッダー ehstorioctl.h (EhStorIoctl.h を含む)