同步評估 ACPI 控制方法

設備磁碟機可以使用下列裝置控制要求來同步評估裝置 ACPI 命名空間中定義的控制方法:

  • IOCTL_ACPI_EVAL_METHOD

    此要求會評估控制項方法,這是傳送要求之裝置 ACPI 命名空間中的立即子物件。

  • IOCTL_ACPI_EVAL_METHOD_EX

    此要求會同步評估裝置所支援的控制項方法,或傳送要求之裝置的子系子物件。

Windows ACPI 驅動程式Acpi.sys代表ACPI BIOS中系統描述資料表中指定的裝置處理這些要求。 這些要求可由核心模式設備磁碟機使用,這些驅動程式符合 核心模式驅動程式架構 (KMDF) Windows 驅動程式模型 (WDM) 的需求。 從Windows 8開始,符合使用者模式驅動程式架構 (UMDF) 需求的使用者模式設備磁碟機可以使用這些要求。

例如,WDM 驅動程式會執行下列一連串的作業,以使用下列其中一個 IOCTLs:

  1. 呼叫 IoBuildDeviceIoControlRequest 來建置要求。

  2. 呼叫 IoCallDriver 以將要求向下傳送到裝置堆疊。

  3. 等候 I/O 管理員向驅動程式發出訊號,指出較低層級的驅動程式已完成要求。

  4. 檢查要求的狀態。

  5. 檢查輸出引數的有效性。

  6. 處理傳回給驅動程式的輸出引數。

  7. 完成要求。

若要建置要求,驅動程式會呼叫 IoBuildDeviceIoControlRequest 並提供下列參數:

  • IoControlCode 設定為 IOCTL_ACPI_EVAL_METHODIOCTL_ACPI_EVAL_METHOD_EX

  • DeviceObject 設定為實體裝置物件的指標, (裝置的 PDO) 。

  • InputBuffer 會設定為輸入緩衝區結構的指標,視要傳遞至控制方法的輸入引數類型而定。 ACPI 驅動程式支援不採用任何輸入引數、採用單一整數、採用 ASCII 字串或採用自訂輸入引數陣列的方法。 如需所支援輸入緩衝區結構的詳細資訊,請參閱 控制方法輸入緩衝區結構

  • InputBufferLength 會設定為 InputBuffer所提供輸入緩衝區的大小,以位元組為單位。

  • OutputBufferLength 會提供 OutputBuffer所提供輸出緩衝區的大小,以位元組為單位。

  • InternalDeviceIoControl 設定為 FALSE

  • 事件 會設定為呼叫端配置和初始化事件物件的指標。 驅動程式會等到 I/O 管理員發出此事件的訊號,這表示較低層級的驅動程式已完成要求。

  • OutputBuffer 提供 ACPI_EVAL_OUTPUT_BUFFER結構的指標 ,其中包含控制項方法的輸出引數。 輸出引數專屬於指定的控制項方法。 若要讓驅動程式傳回任何輸出,它必須配置足以保存所有輸出引數的緩衝區。

  • IoStatusBlock 設定為 IO_STATUS_BLOCK 結構。 這會傳回較低層級驅動程式所設定之要求的狀態。

如需如何評估不接受輸入引數之控制項方法的程式碼範例,請參閱 評估沒有輸入引數的控制項方法

如需如何評估接受輸入引數的控制項方法的程式碼範例,請參閱 評估採用輸入引數的 Control 方法