IOCTL_ACPI_ASYNC_EVAL_METHOD IOCTL (acpiioct.h)
裝置的驅動程式可以使用IOCTL_ACPI_ASYNC_EVAL_METHOD裝置控制要求,以異步方式評估裝置支援的ACPI控制項方法。 驅動程式應該呼叫 IoBuildDeviceIoControlRequest ,並傳遞下列輸入和輸出參數來建置此要求。
主要程序代碼
輸入緩衝區
設定 IoBuildDeviceIoControlRequest 輸入參數,如下所示:
- IoControlCode 設定為 IOCTL_ACPI_ASYNC_EVAL_METHOD。
- DeviceObject 設定為實體裝置物件的指標, (裝置的 PDO) 。
- InputBuffer 會設定為輸入緩衝區結構的指標,此結構取決於要傳遞至控件方法的輸入自變數類型。 如需此 IOCTL 支援之輸入自變數類型的詳細資訊,請參閱本主題稍後的一節。
- InputBufferLength 會設定為 InputBuffer 所提供的輸入緩衝區大小,以位元組為單位。
- OutputBufferLength 提供 OutputBuffer 所提供的輸出緩衝區大小,以位元組為單位。
- InternalDeviceIoControl 設定為 FALSE。
- 事件 設定為 NULL。
輸入緩衝區長度
InputBufferLength 會設定為 InputBuffer 所提供的輸入緩衝區大小,以位元組為單位。
輸出緩衝區
設定 IoBuildDeviceIoControlRequest 輸出參數,如下所示:
- OutputBuffer 提供 ACPI_EVAL_OUTPUT_BUFFER結構的指標 ,其中包含控件方法的輸出自變數。
- IoStatusBlock 設定為 IO_STATUS_BLOCK 結構。
輸出緩衝區長度
OutputBufferLength 提供 OutputBuffer 所提供的輸出緩衝區大小,以位元組為單位。
狀態區塊
如果要求成功,IoStatusBlock-Status> 會設定為 STATUS_SUCCESS;否則,Status 成員會設定為錯誤碼。 如果輸出緩衝區不夠大,無法包含輸出緩衝區標頭, 則 Status 成員會設定為 STATUS_BUFFER_TOO_SMALL。 如果輸出緩衝區夠大,足以包含輸出緩衝區標頭,但不足以包含控件方法的所有輸出自變數,Status 成員會設定為 STATUS_BUFFER_OVERFLOW,而 OutputBuffer-Length> 會設定為輸出緩衝區的必要長度。
如果要求成功,IoStatusBlock-Information> 成員會設定為輸出緩衝區中傳回的位元組數目,否則資訊成員會設定為零。
備註
裝置的驅動程式可以使用IOCTL_ACPI_ASYNC_EVAL_METHOD,以異步方式評估裝置支援的控件方法。 例如,如果裝置在 ACPI 命名空間中命名為 『ABCD』,而 'ABCD' 裝置支援名為 '_FOO'的方法,這個 IOCTL 可用來評估控制方法 '_FOO',方法是將要求傳送至 'ABCD' 裝置並提供控制方法名稱 '_FOO'。
IOCTL_ACPI_ASYNC_EVAL_METHOD支援下列類型的輸入緩衝區結構:
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER
ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING
ACPI_EVAL_INPUT_BUFFER_COMPLEX
控件方法的輸出自變數會在 OutBuffer 指標所提供的可變長度ACPI_EVAL_OUTPUT_BUFFER結構中傳回。 ACPI_EVAL_OUTPUT_BUFFER包含可變長度 ACPI_METHOD_ARGUMENT 結構的陣列,每個結構都會傳回輸出自變數。
如需如何同步評估 ACPI 控制件方法的資訊,請參閱同步評估 ACPI 控制項方法 IOCTL_ACPI_EVAL_METHOD、 IOCTL_ACPI_EVAL_METHOD_EX和 評估 ACPI 控制項方法。
IOCTL_ACPI_ASYNC_EVAL_METHOD只能在 IRQL <= DISPATCH_LEVEL使用。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista 和更新版本的 Windows。 |
標頭 | acpiioct.h (include Acpiioct.h) |
另請參閱
ACPI_EVAL_INPUT_BUFFER_COMPLEX
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER