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_ENUM_CHILDREN_OUTPUT_BUFFER結構的指標 , 其中 ACPI 驅動程式會傳回列舉子裝置的路徑和名稱。
- 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 成員會設定為零。
備註
IOCTL_ACPI_ENUM_CHILDREN會傳回可變長度ACPI_ENUM_CHILDREN_OUTPUT_BUFFER結構,其中包含可變長度 ACPI_ENUM_CHILD 結構的陣列,其中每一個結構都會傳回要求所傳送裝置之 ACPI 命名空間中物件的完整路徑和名稱。 此要求列舉的對象取決於所提供輸入結構ACPI_ENUM_CHILDREN_INPUT_BUFFER之 Flags 成員的設定,如下所示:
如果驅動程式配置的輸出緩衝區不夠大,無法傳回所有要求的子名稱,ACPI 驅動程式不會傳回任何子名稱,並將要求IO_STATUS_BLOCK的 Status 成員設定為STATUS_BUFFER_OVERFLOW。 在此情況下,如果輸出緩衝區的大小以位元組為單位至少 為 sizeof (ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE) ,ACPI 驅動程式也會將 NumberOfChildren 設定為大小,以位元組為單位,這是擷取要求的路徑和名稱所需的大小。
驅動程式通常會使用兩個IOCTL_ACPI_ENUM_CHILDREN要求序列來列舉感興趣的子物件。 驅動程式會傳送第一個要求,以取得包含所有要求對象的路徑和名稱所需的輸出緩衝區大小。 驅動程式會傳送第二個要求,以傳回輸出緩衝區中對象的路徑和名稱。
如需如何列舉裝置子裝置的詳細資訊,請參閱 列舉子裝置和控制方法。
IOCTL_ACPI_ENUM_CHILDREN只能用於 IRQL< DISPATCH_LEVEL。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista 和更新版本的 Windows。 |
標頭 | acpiioct.h (包含 Acpiioct.h) |