ProcessorHalt 루틴은 프로세서를 중지할 준비를 합니다.
통사론
POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;
NTSTATUS Pofxcallbackprocessorhalt(
[in] ULONG Flags,
[in, out, optional] PVOID Context,
[in] PPROCESSOR_HALT_ROUTINE Halt
)
{...}
매개 변수
[in] Flags
프로세서가 입력할 유휴 상태의 속성을 나타내는 플래그입니다. Flags 매개 변수는 다음 플래그 비트 중 하나 이상의 비트 OR 또는 0으로 설정됩니다.
| 플래그 이름 | 값 | 묘사 |
|---|---|---|
| PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE | 0x01 | PEP의 중지 콜백 루틴은 프로세서의 캐시를 플러시하는 역할을 합니다. 이 플래그가 설정되지 경우 ProcessorHalt 프로세서 유휴 상태로 항목의 캐시를 플러시하고 이 상태에서 종료 시 캐시를 무효화합니다. |
| PROCESSOR_HALT_CACHE_COHERENT | 0x02 | 프로세서의 캐시가 일관되게 유지되는 유휴 상태가 되도록 프로세서를 준비합니다. |
| PROCESSOR_HALT_CONTEXT_RETAINED | 0x04 | 프로세서의 스레드 컨텍스트가 유지되는 유휴 상태가 되도록 프로세서를 준비합니다. |
| PROCESSOR_HALT_RETURN_NOT_SAFE | 0x08 | PEP의 중지 콜백 루틴은 반환되지 않도록 보장됩니다. 중지 콜백이 프로세서를 하드웨어에서 취소할 수 없는 컨텍스트 손실 전원 제어 상태로 전환하는 경우 이 플래그를 설정합니다. 이 플래그가 설정되면 운영 체제는 중지 콜백의 반환을 치명적인 오류로 처리합니다. |
| PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND | 0x16 |
[in, out, optional] Context
PEP 정의 프로세서 중지 컨텍스트에 대한 포인터입니다. 이 포인터는 중지 콜백 루틴에 매개 변수로 전달됩니다. 이 컨텍스트는 Windows PoFx(전원 관리 프레임워크)에 대해 불투명합니다.
[in] Halt
PEP 구현 중지 콜백 루틴에 대한 포인터입니다. PoFx는 프로세서를 중지하기 위한 준비가 완료된 후 이 루틴을 호출합니다. 이 콜백 중에 PEP는 프로세서를 중지된 상태로 전환해야 합니다.
반환 값
ProcessorHalt 프로세서를 중지할 준비가 되면 STATUS_SUCCESS 반환합니다. 가능한 오류 반환 값에는 다음 상태 코드가 포함됩니다.
| 반환 값 | 묘사 |
|---|---|
|
Halt 매개 변수는 NULL입니다. 또는 잘못된 플래그 값이 Flags; 에 지정되었습니다. 또는 플래그 플래그 비트의 잘못된 조합이 포함되어 있습니다. 자세한 내용은 비고를 참조하세요. |
|
PEP의 중지 콜백 루틴은 프로세서의 하드웨어 컨텍스트가 유지되지 않은 유휴 상태에서 예기치 않게 반환됩니다. |
발언
이 루틴은 PoFx(전원 관리 프레임워크)에 의해 구현되며 PEP(플랫폼 확장 플러그 인)에서 호출됩니다. PEP_KERNEL_INFORMATION_STRUCT_V3 구조체의 ProcessorHalt 멤버는 ProcessorHalt 루틴에 대한 포인터입니다.
프로세서를 중지하기 전에 PEP는 ProcessorHalt 루틴을 호출하여 PoFx에 프로세서의 하드웨어 컨텍스트를 저장할 수 있는 기회를 제공합니다. 필요한 경우 ProcessorHalt 이 상태를 PoFx에 내부적으로 저장하므로 프로세서가 유휴 상태를 종료할 때 나중에 상태를 복원할 수 있습니다. 프로세서가 유휴 상태로 전환되도록 준비한 ProcessorHalt PEP의 중지 콜백 루틴을 호출하여 프로세서를 중지합니다.
PEP의 PEP_NOTIFY_PPM_IDLE_EXECUTE 알림 처리의 일환으로 PEP는 프로세서를 PEP가 선택한 유휴 상태로 전환해야 합니다. 다음은 프로세서 유휴 상태를 입력하는 두 가지 방법입니다.
- 모든 시스템 및 프로세서 상태가 유지되도록 프로세서의 캐시가 일관되게 유지되는 프로세서 유휴 상태의 경우 PEP는 ProcessorHalt먼저 호출하지 않고도 유휴 상태를 직접 입력할 수 있습니다.
- 프로세서의 캐시가 일관되지 않거나 프로세서 하드웨어 컨텍스트가 유지되지 않는 유휴 상태인 프로세서 유휴 상태의 경우 PEP는 프로세서를 유휴 상태로 전환하기 전에 ProcessorHalt 호출해야 합니다.
-
PROCESSOR_HALT_CONTEXT_RETAINED = 1 및 PROCESSOR_HALT_RETURN_NOT_SAFE = 1
PEP의 중지 콜백 루틴은 컨텍스트가 유지되는 모든 상태에서 반환되어야 합니다.
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 및 PROCESSOR_HALT_CACHE_COHERENT = 1
캐시-플러시 재정의 플래그는 캐시 일관성이 없는 유휴 상태를 입력하는 경우에만 설정해야 합니다.
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 및 PROCESSOR_HALT_CACHE_COHERENT = 0
캐시-플러시 재정의 플래그는 캐시가 아닌 일관된 중지에 대해 설정해야 합니다.
-
PROCESSOR_HALT_CONTEXT_RETAINED = 0 및 PROCESSOR_HALT_CACHE_COHERENT = 1
프로세서 하드웨어 컨텍스트가 손실되는 유휴 상태(따라서 다중 프로세서 주차 프로토콜 사용하여 유휴 상태를 종료하고 운영 체제로 제어를 반환)는 캐시 일관성 상태가 아닙니다.
PEP는 IRQL <= HIGH_LEVEL 이 루틴을 호출할 수 있습니다.
요구 사항
| 요구 | 값 |
|---|---|
| 지원되는 최소 클라이언트 | Windows 10부터 지원됩니다. |
| 대상 플랫폼 | Windows |
| 헤더 | pepfx.h(Pep_x.h 포함) |
| IRQL | <= HIGH_LEVEL |