IOCTL_ACPI_ENUM_CHILDREN IOCTL (acpiioct.h)
IOCTL_ACPI_ENUM_CHILDREN デバイス制御要求を使用して、この要求が送信されるデバイスの ACPI 名前空間内のデバイスまたは名前付き子オブジェクトのパスと名前を列挙できます。 ドライバーは IoBuildDeviceIoControlRequest 呼び出し、次の入力パラメーターと出力パラメーターを渡してこの要求をビルドする必要があります。
メジャー コード
入力バッファー
IoBuildDeviceIoControlRequest 入力パラメーターを次のように設定します。
- IoControlCode は IOCTL_ACPI_ENUM_CHILDREN に設定されます。
- DeviceObject は、デバイスの物理デバイス オブジェクト (PDO) へのポインターに設定されます。
- InputBuffer は、可変長の ACPI_ENUM_CHILDREN_INPUT_BUFFER 構造体へのポインターに設定されます。
- InputBufferLength は、InputBuffer によって提供される入力バッファーのサイズ (バイト単位)設定されます。
- OutputBufferLength 、OutputBuffer によって提供される出力バッファーのサイズバイト単位で提供されます。
- InternalDeviceIoControl は FALSE に設定されます。
- イベント は、呼び出し元によって割り当てられ、初期化されたイベント オブジェクトへのポインターに設定されます。
入力バッファーの長さ
InputBufferLength は、InputBuffer によって提供される入力バッファーのサイズ (バイト単位)設定されます。
出力バッファー
IoBuildDeviceIoControlRequest 出力パラメーターを次のように設定します。
- OutputBuffer は、ACPI ドライバーが列挙子デバイスのパスと名前を返す可変長の ACPI_ENUM_CHILDREN_OUTPUT_BUFFER 構造体へのポインターを提供します。
- IoStatusBlock は、IO_STATUS_BLOCK 構造体に設定されます。
出力バッファーの長さ
OutputBufferLength 、OutputBuffer によって提供される出力バッファーのサイズバイト単位で提供されます。
状態ブロック
要求が成功した場合は、IoStatusBlock ->Status が STATUS_SUCCESS に設定。それ以外の場合、Status メンバーはエラー コードに設定されます。 出力バッファーがバッファー ヘッダーを格納するのに十分な大きさでない場合、Status メンバーは STATUS_BUFFER_TOO_SMALL に設定されます。 出力バッファーが出力バッファー ヘッダーを格納するのに十分な大きさであるが、列挙されたすべての子オブジェクトのパスと名前を格納するのに十分な大きさでない場合、Status メンバーは STATUS_BUFFER_OVERFLOW に設定され、OutputBuffer >- NumberOfChildren が出力バッファーの必要な長さに設定されます。
要求が成功した場合、IoStatusBlock->Information メンバーは、出力バッファーで返されるバイト数に設定されます。それ以外の場合、Information メンバーは 0 に設定されます。
備考
IOCTL_ACPI_ENUM_CHILDRENは、可変長 ACPI_ENUM_CHILD 構造体の配列を含む可変長ACPI_ENUM_CHILDREN_OUTPUT_BUFFER構造体を返します。各構造体は、要求が送信されたデバイスの ACPI 名前空間内のオブジェクトの完全修飾パスと名前を返します。 この要求が列挙するオブジェクトは、次のように、指定された入力構造体ACPI_ENUM_CHILDREN_INPUT_BUFFERの Flags メンバーの設定によって異なります。
ドライバーが割り当てる出力バッファーが、要求されたすべての子名を返すのに十分な大きさでない場合、ACPI ドライバーは子名を返しませんし、STATUS_BUFFER_OVERFLOWする要求のIO_STATUS_BLOCKの 状態 メンバーを設定します。 この場合、出力バッファーのサイズ (バイト単位) が少なくとも sizeof(ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE) である場合、ACPI ドライバーは、要求されたパスと名前を取得するために必要 NumberOfChildren をバイト単位のサイズに設定します。
通常、ドライバーは、対象の子オブジェクトを列挙するために、2 つのIOCTL_ACPI_ENUM_CHILDREN要求のシーケンスを使用します。 ドライバーは、要求されたすべてのオブジェクトのパスと名前を格納するために必要な出力バッファーのサイズを取得する最初の要求を送信します。 ドライバーは、出力バッファー内のオブジェクトのパスと名前を返す 2 番目の要求を送信します。
デバイスの子デバイスを列挙する方法の詳細については、「子デバイスの列挙と制御メソッドの」を参照してください。
IOCTL_ACPI_ENUM_CHILDRENは IRQL< DISPATCH_LEVEL でのみ使用できます。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista 以降のバージョンの Windows。 |
ヘッダー | acpiioct.h (Acpiioct.h を含む) |