ACPI 通知

PEP の AcceptAcpiNotification コールバック ルーチンが受信する各 ACPI 通知には、通知の種類を示す Notification パラメーターと、指定された通知の種類の情報を含むデータ構造を指す Data パラメーターが付属しています。

この呼び出しでは、Notification パラメーターは、通知の種類を示すPEP_NOTIFY_ACPI_XXX定数値に設定されます。 Data パラメーターは、この通知の種類に関連付けられているPEP_ACPI_XXX構造体の種類を指します。

次の ACPI 通知 ID は、AcceptAcpiNotification コールバック ルーチンによって使用されます。

通知 ID 価値 関連付けられた構造体
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 電源管理フレームワーク (PoFx) は、Windows ACPI ドライバーがデバイスの列挙中に ACPI 名前空間内の新しいデバイスを検出すると、この通知を送信します。 この通知は、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 に設定します。

デバイスの ACPI サービスを提供する準備ができていることを PEP が (DeviceAccepted = TRUE を設定して) 示した場合、PoFx は PEP に PEP_NOTIFY_ACPI_REGISTER_DEVICE通知を送信して、PEP をデバイスの ACPI サービスの唯一のプロバイダーとして登録することで応答します。 PoFx では、デバイスの ACPI サービス プロバイダーの役割を要求する PEP は 1 つだけです。

ベスト プラクティスとして、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(ACPIデバイス放棄通知)

通知:PEP_NOTIFY_ACPI_ABANDON_DEVICE の値。

データ: 破棄されたデバイスを識別するPEP_ACPI_ABANDON_DEVICE構造体へのポインター。

指定したデバイスが破棄され、PEP から ACPI サービスが不要になったことを PEP に通知します。

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_ABANDON_DEVICE 通知を送信する前に、デバイスに対して PEP_NOTIFY_ACPI_UNREGISTER_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 値を作成してデバイスを識別し、このハンドル値を構造体に書き込む必要があります。

指定したデバイスの ACPI サービスの唯一のプロバイダーとして PEP を登録します。

Windows 電源管理フレームワーク (PoFx) は、以前のPEP_NOTIFY_ACPI_PREPARE_DEVICE通知で、指定されたデバイスに ACPI サービスを提供する準備ができていることを示した PEP にこの通知を送信します。

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通知でこのデバイス用に作成された 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値。

データ: デバイスの ACPI 名前空間内のオブジェクトの列挙体を含むPEP_ACPI_ENUMERATE_DEVICE_NAMESPACE構造体へのポインター。

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構造体へのポインター。

以前に列挙された ACPI オブジェクトに関する情報を PEP に照会します。

Windows 電源管理フレームワーク (PoFx) は、この通知を送信して、前のPEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知の処理中に列挙されたオブジェクトの属性を PEP に照会します。 現在、列挙されるオブジェクトはコントロール メソッドだけです。

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値。

データ: 評価する ACPI 制御メソッド、このメソッドに指定する入力引数、および結果の出力バッファーを指定するPEP_ACPI_EVALUATE_CONTROL_METHOD構造体へのポインター。

PEP が登録済みハンドラーである ACPI 制御メソッドを評価するために使用されます。

Windows 電源管理フレームワーク (PoFx) は、Windows ACPI ドライバーが PEP によって実装されている ACPI 制御メソッドを評価する必要がある場合に、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 にPEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知を送信してこのメソッドを評価します。

PEP がデバイスに対して処理できる ACPI 制御メソッドの例の一覧を次に示します。

デバイスの識別と構成: _HID、_CID、_UID、_ADR、_CLS、_SUB、_CRS、_PRSなど。 デバイスの電源管理とウェイク: _PS0から_PS3、_PR0から_PR3、_DSWなど。 デバイス固有のメソッド: _DSMおよびデバイス スタック固有の制御メソッド。 ACPI 時刻やアラーム デバイスなどの特殊なデバイスの場合、この通知は時間とアラームの方法 (_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 に、デバイスに必要な電源制御リソースの変換されたリソースの一覧を提供します。

Windows 電源管理フレームワーク (PoFx) は、PEP が前のPEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知に応答して生のリソースを一覧表示した場合に、この通知を送信します。 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 は、要求されている作業を記述する PEP によって割り当てられたPEP_WORK_INFORMATION構造体を指す WorkInformation メンバーを設定する必要があります。 さらに、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 で呼び出されます。