共用方式為


ACPI 通知

PEP 的 AcceptAcpiNotification 回呼例程收到的每個 ACPI 通知都會伴隨指出通知類型的 Notification 參數,以及指向包含指定通知類型資訊之數據結構的 Data 參數。

在此呼叫中,Notification 參數會設定為指出通知類型的PEP_NOTIFY_ACPI_XXX常數值。 Data 參數會指向與此通知類型相關聯的PEP_ACPI_XXX結構類型。

AcceptAcpiNotification 回呼例程會使用下列 ACPI 通知標識符。

通知標識碼 相關聯的結構
PEP_NOTIFY_ACPI_PREPARE_DEVICE 0x01 PEP_ACPI_PREPARE_DEVICE
PEP_NOTIFY_ACPI_ABANDON_DEVICE 0x02 PEP_ACPI_ABANDON_DEVICE
PEP_NOTIFY_ACPI_REGISTER_DEVICE 0x03 PEP_ACPI_REGISTER_DEVICE
PEP_NOTIFY_ACPI_UNREGISTER_DEVICE 0x04 PEP_ACPI_UNREGISTER_DEVICE
PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE 0x05 PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE
PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION 0x06 PEP_ACPI_QUERY_OBJECT_INFORMATION
PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD 0x07 PEP_ACPI_EVALUATE_CONTROL_METHOD
PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES 0x08 PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES
PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES 0x09 PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES

PEP_NOTIFY_ACPI_PREPARE_DEVICE

通知:值PEP_NOTIFY_ACPI_PREPARE_DEVICE。 數據:依名稱識別裝置之PEP_ACPI_PREPARE_DEVICE結構的指標。

允許 PEP 選擇是否要為裝置提供 ACPI 服務。

當 Windows ACPI 驅動程式在裝置列舉期間探索 ACPI 命名空間中的新裝置時,Windows 電源管理架構 (PoFx) 傳送此通知。 此通知會傳送至實作 AcceptAcpiNotification 回呼例程的 PEP。

若要傳送PEP_NOTIFY_ACPI_PREPARE_DEVICE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 例程。 在此呼叫中,Notification 參數值PEP_NOTIFY_ACPI_PREPARE_DEVICE,而 Data 參數會指向包含裝置名稱的PEP_ACPI_PREPARE_DEVICE結構。 如果 PEP 已準備好為此裝置提供 ACPI 服務,PEP 會將此結構的 DeviceAccepted 成員設定為 TRUE。 若要拒絕提供這類服務,PEP 會將此成員設定為 FALSE。

如果 PEP 透過設定 DeviceAccepted = TRUE 來指出 (,) 它準備好為裝置提供 ACPI 服務,PoFx 會藉由傳送 PEP PEP_NOTIFY_ACPI_REGISTER_DEVICE通知來回應,以註冊 PEP,以成為裝置的唯一 ACPI 服務提供者。 PoFx 預期只有一個 PEP 可宣告裝置 ACPI 服務提供者的角色。

最佳做法是不要執行任何裝置初始化,以回應PEP_NOTIFY_ACPI_PREPARE_DEVICE通知。 相反地,請延遲此初始化,直到收到裝置的PEP_NOTIFY_ACPI_REGISTER_DEVICE通知,或 (ACPI 控制方法,例如,為裝置叫用_INI) 。

對於PEP_NOTIFY_ACPI_PREPARE_DEVICE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_ABANDON_DEVICE

通知:值PEP_NOTIFY_ACPI_ABANDON_DEVICE。

數據:識別已放棄裝置之PEP_ACPI_ABANDON_DEVICE結構的指標。

通知 PEP 指定的裝置已放棄,且不再需要 PEP 的 ACPI 服務。

Windows 電源管理架構 (PoFx) 傳送此通知,通知 PEP 裝置不再由操作系統使用。 PEP 可以使用此通知來清除它配置來追蹤裝置狀態的任何內部記憶體。

若要傳送PEP_NOTIFY_ACPI_ABANDON_DEVICE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_ABANDON_DEVICE,而 Data 參數會指向PEP_ACPI_ABANDON_DEVICE結構。

PoFx 只會將此通知傳送至已選擇在先前PEP_NOTIFY_ACPI_PREPARE_DEVICE通知中為裝置提供 ACPI 服務的 PEP。 如果 PEP 已註冊在先前的PEP_NOTIFY_ACPI_REGISTER_DEVICE通知中提供這些服務,PoFx 會先傳送裝置的PEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知,再傳送PEP_NOTIFY_ACPI_ABANDON_DEVICE通知。

對於PEP_NOTIFY_ACPI_ABANDON_DEVICE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_REGISTER_DEVICE

通知:值PEP_NOTIFY_ACPI_REGISTER_DEVICE。

數據:識別裝置之PEP_ACPI_REGISTER_DEVICE結構的指標。 為了回應此通知,PEP 預期會建立有效的 PEPHANDLE 值來識別裝置,並將此句柄值寫入結構。

將 PEP 註冊為指定裝置的唯一 ACPI 服務提供者。

Windows 電源管理架構 (PoFx) 會將此通知傳送至先前PEP_NOTIFY_ACPI_PREPARE_DEVICE通知中所指出的 PEP,其已準備好為指定的裝置提供 ACPI 服務。

若要傳送PEP_NOTIFY_ACPI_REGISTER_DEVICE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_REGISTER_DEVICE,而 Data 參數會指向可識別 PEP 提供 ACPI 服務之裝置的PEP_ACPI_REGISTER_DEVICE結構。

對於PEP_NOTIFY_ACPI_REGISTER_DEVICE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_UNREGISTER_DEVICE

通知:值PEP_NOTIFY_ACPI_UNREGISTER_DEVICE。

數據:包含裝置 PEPHANDLE 之PEP_ACPI_UNREGISTER_DEVICE結構的指標。

從 PEP 取消 ACPI 服務的指定裝置註冊。

為了回應此通知,PEP 可以在先前的PEP_NOTIFY_ACPI_REGISTER_DEVICE通知中終結 PEP 為這個裝置建立的 PEPHANDLE。

若要傳送PEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_UNREGISTER_DEVICE,而 Data 參數會指向PEP_ACPI_UNREGISTER_DEVICE結構。

對於PEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE

通知:值PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE。

數據:指向PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE結構的指標,其中包含裝置 ACPI 命名空間中物件的列舉。

查詢 PEP,以取得 ACPI 物件清單, (ACPI 命名空間中指定裝置下 PEP 支援的原生方法) 。

Windows ACPI 驅動程式會使用此通知列舉的物件來建置指定裝置的命名空間。 之後,參考此裝置時,ACPI 驅動程式只會查詢這些物件的 PEP。

Windows 電源管理架構 (PoFx) 會在探索到裝置後立即傳送PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知,而 PEP 快取器會為裝置提供 ACPI 服務。 如需此註冊的詳細資訊,請參閱 PEP_NOTIFY_ACPI_REGISTER_DEVICE。

若要傳送PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE,而 Data 參數會指向PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE結構。

AcceptAcpiNotification 例程預期會處理PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知並傳回 TRUE。 若無法這麼做,會導致錯誤檢查。

對於PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION

通知:值PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION。

數據:指定 ACPI 物件屬性之PEP_ACPI_QUERY_OBJECT_INFORMATION結構的指標。

查詢 PEP,以取得先前列舉 ACPI 對象的相關信息。

Windows 電源管理架構 (PoFx) 傳送此通知,以查詢 PEP,以取得在處理先前PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知期間列舉的物件屬性。 目前,唯一列舉的對像是控件方法。

若要傳送PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION,而 Data 參數會指向PEP_ACPI_QUERY_OBJECT_INFORMATION結構。

對於PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD

通知:值PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD。

數據:PEP_ACPI_EVALUATE_CONTROL_METHOD 結構的指標,指定要評估的ACPI控件方法、要提供給這個方法的輸入自變數,以及結果的輸出緩衝區。

用來評估 PEP 是已註冊處理程式的 ACPI 控制方法。

當 Windows ACPI 驅動程式需要評估 PEP 實作的 ACPI 控制方法時,Windows 電源管理架構 (PoFx) 將此通知傳送至 PEP。

若要傳送PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD,而 Data 參數會指向PEP_ACPI_EVALUATE_CONTROL_METHOD結構。

平台設計工具可以選擇讓 PEP 或 ACPI 韌體處理特定的 ACPI 控制方法。 如果 PEP 是 ACPI 控制方法的已註冊處理程式,PoFx 會回應來自 Windows ACPI 驅動程式的要求,藉由將PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知傳送至 PEP 來評估此方法。

以下是 PEP 可以處理裝置的 ACPI 控制方法範例清單:

裝置識別和設定:_HID、_CID、_UID、_ADR、_CLS、_SUB、_CRS、_PRS等等。 裝置電源管理和喚醒:透過_PS3_PS0、_PR0到_PR3、_DSW等等。 裝置特定方法:_DSM和任何裝置堆疊特定的控制方法。 對於 ACPI Time 和 Alarm 裝置等特殊裝置,此通知是用來評估時間和警示方法 (_GCP、_GRT、_SRT等) 。

對於PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES

通知:值PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES。

數據:包含電源資源清單之PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES結構的指標。

查詢 PEP,以取得控制裝置電源所需的原始資源清單。

為了回應此通知,PEP 會提供控制裝置電源所需的原始資源清單。 Windows ACPI 驅動程式需要此列表,才能保留裝置所需的電源資源,並藉由傳送PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知) ,將翻譯的資源對應清單提供給 PEP (。 如需詳細資訊,請參閱原始和翻譯的資源。

若要傳送PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知,Windows 電源管理架構 (PoFx) 呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES,而 Data 參數會指向PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES結構。

對於PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES

通知:值PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES。

數據:包含已翻譯資源清單之PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES結構的指標。

為 PEP 提供裝置所需的任何電源控制資源翻譯資源清單。

如果 PEP 列出任何原始資源以回應先前的PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知,則 Windows 電源管理架構 (PoFx) 傳送此通知。 PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知會為 PEP 提供對應的翻譯資源清單。 如需詳細資訊,請參閱原始和翻譯的資源。

若要傳送PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知,PoFx 會呼叫 PEP 的 AcceptAcpiNotification 回呼例程。 在此呼叫中,Notification 參數值會PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES,而 Data 參數會指向PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES結構。

對於PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。

PEP_NOTIFY_ACPI_WORK

通知:值PEP_NOTIFY_ACPI_WORK。

數據:PEP_WORK 結構的指標。

每次 PEP 呼叫 RequestWorker 例程以要求 Windows 電源管理架構 (PoFx) 的工作專案時,都會傳送至 PEP 一次。 此通知用於僅限 ACPI 的工作。

在 PEP 呼叫 RequestWorker 例程來要求工作項目之後,PoFx 會藉由傳送 PEP PEP_NOTIFY_ACPI_WORK 通知來回應。 不過,在資源 (之前,不會傳送此通知,也就是處理工作專案所需的背景工作線程) 。 如此一來,PoFx 可確保 PEP 在通知期間傳遞至 PoFx 的工作要求,因為缺少資源而永遠不會失敗。

在輸入時,PEP 應該假設PEP_WORK結構未初始化。 若要處理此通知,PEP 應該將 WorkInformation 成員設定為指向 PEP 配置的PEP_WORK_INFORMATION結構,描述所要求的工作。 此外,PEP 應該將PEP_WORK結構的 NeedWork 成員設定為 TRUE,以確認 PEP 已處理PEP_NOTIFY_ACPI_WORK通知,而 WorkInformation 成員指向有效的PEP_WORK_INFORMATION結構。 如果 PEP 無法處理通知或無法配置PEP_WORK_INFORMATION結構,PEP 應該將 WorkInformation 成員設定為 NULL,並將 NeedWork 成員設定為 FALSE。

對於PEP_NOTIFY_ACPI_WORK通知,AcceptAcpiNotification 例程一律會在 IRQL = PASSIVE_LEVEL呼叫。