ACPI 알림

PEP의 AcceptAcpiNotification 콜백 루틴이 수신하는 각 ACPI 알림에는 알림 유형을 나타내는 Notification 매개 변수와 지정된 알림 유형에 대한 정보가 포함된 데이터 구조를 가리키는 Data 매개 변수가 함께 제공됩니다.

이 호출에서 Notification 매개 변수는 알림 유형을 나타내는 PEP_NOTIFY_ACPI_XXX 상수 값으로 설정됩니다. 데이터 매개 변수는 이 알림 유형과 연결된 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 서비스를 제공할지 여부를 선택할 수 있습니다.

PoFx(Windows 전원 관리 프레임워크)는 Windows ACPI 드라이버가 디바이스 열거 중에 ACPI 네임스페이스에서 새 디바이스를 검색할 때 이 알림을 보냅니다. 이 알림은 AcceptAcpiNotification 콜백 루틴을 구현하는 PEP로 전송됩니다.

PEP_NOTIFY_ACPI_PREPARE_DEVICE 알림을 보내기 위해 PoFx는 PEP의 AcceptAcpiNotification 루틴을 호출합니다. 이 호출에서 Notification 매개 변수 값은 PEP_NOTIFY_ACPI_PREPARE_DEVICE 데이터 매개 변수는 디바이스 이름이 포함된 PEP_ACPI_PREPARE_DEVICE 구조를 가리킵니다. PEP가 이 디바이스에 대한 ACPI 서비스를 제공할 준비가 되면 PEP는 이 구조의 DeviceAccepted 멤버를 TRUE로 설정합니다. PEP는 이러한 서비스 제공을 거부하기 위해 이 멤버를 FALSE로 설정합니다.

PEP가 디바이스에 대한 ACPI 서비스를 제공할 준비가 되었음을 DeviceAccepted = TRUE로 설정하여 나타내는 경우 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의 ACPI 서비스가 필요하지 않음을 PEP에 알릴 수 있습니다.

PoFx(Windows 전원 관리 프레임워크)는 이 알림을 보내 PEP에 디바이스가 더 이상 운영 체제에서 사용되지 않음을 알릴 수 있습니다. PEP는 이 알림을 사용하여 디바이스 상태를 추적하기 위해 할당한 모든 내부 스토리지를 클린 수 있습니다.

PEP_NOTIFY_ACPI_ABANDON_DEVICE 알림을 보내기 위해 PoFx는 PEP의 AcceptAcpiNotification 콜백 루틴을 호출합니다. 이 호출에서 Notification 매개 변수 값은 PEP_NOTIFY_ACPI_ABANDON_DEVICE 데이터 매개 변수는 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를 등록합니다.

PoFx(Windows 전원 관리 프레임워크)는 이전 PEP_NOTIFY_ACPI_PREPARE_DEVICE 알림에서 지정된 디바이스에 대한 ACPI 서비스를 제공할 준비가 되었음을 나타내는 PEP에 이 알림을 보냅니다.

PEP_NOTIFY_ACPI_REGISTER_DEVICE 알림을 보내기 위해 PoFx는 PEP의 AcceptAcpiNotification 루틴을 호출합니다. 이 호출에서 Notification 매개 변수 값은 PEP_NOTIFY_ACPI_REGISTER_DEVICE 데이터 매개 변수는 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 데이터 매개 변수는 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 네임스페이스의 지정된 디바이스에서 쿼리합니다.

Windows ACPI 드라이버는 이 알림에 의해 열거된 개체를 사용하여 지정된 디바이스에 대한 네임스페이스를 빌드합니다. 그 후 이 디바이스를 참조할 때 ACPI 드라이버는 이러한 개체에 대해서만 PEP를 쿼리합니다.

PoFx(Windows 전원 관리 프레임워크)는 디바이스가 검색되고 PEP가 디바이스에 대한 ACPI 서비스를 제공하기 위해 등록한 직후에 PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE 알림을 보냅니다. 이 등록에 대한 자세한 내용은 PEP_NOTIFY_ACPI_REGISTER_DEVICE 참조하세요.

PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE 알림을 보내기 위해 PoFx는 PEP의 AcceptAcpiNotification 콜백 루틴을 호출합니다. 이 호출에서 Notification 매개 변수 값은 PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE 데이터 매개 변수는 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에 쿼리합니다.

PoFx(Windows 전원 관리 프레임워크)는 이전 PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE 알림을 처리하는 동안 열거된 개체의 특성에 대해 PEP를 쿼리하기 위해 이 알림을 보냅니다. 현재 열거된 개체는 컨트롤 메서드뿐입니다.

PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION 알림을 보내기 위해 PoFx는 PEP의 AcceptAcpiNotification 콜백 루틴을 호출합니다. 이 호출에서 Notification 매개 변수 값은 PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION 데이터 매개 변수는 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 ACPI 드라이버가 PEP에 의해 구현되는 ACPI 제어 메서드를 평가해야 하는 경우 PoFx(Windows 전원 관리 프레임워크)는 이 알림을 PEP에 보냅니다.

PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD 알림을 보내기 위해 PoFx는 PEP의 AcceptAcpiNotification 콜백 루틴을 호출합니다. 이 호출에서 Notification 매개 변수 값은 PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD 데이터 매개 변수는 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 등 디바이스 전원 관리 및 절전 모드 해제: _PS3 통해 _PS0, _PR3, _DSW 등을 통해 _PR0. 디바이스별 메서드: _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에 제공할 수 있도록 이 목록이 필요합니다(PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES 알림 보내기). 자세한 내용은 원시 및 번역된 리소스를 참조하세요.

PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES 알림을 보내기 위해 PoFx(Windows 전원 관리 프레임워크)는 PEP의 AcceptAcpiNotification 콜백 루틴을 호출합니다. 이 호출에서 Notification 매개 변수 값은 PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES 데이터 매개 변수는 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 알림에 대한 응답으로 원시 리소스를 나열한 경우 PoFx(Windows 전원 관리 프레임워크)는 이 알림을 보냅니다. 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 데이터 매개 변수는 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 호출됩니다.