다음을 통해 공유


POFXCALLBACKPROCESSORHALT 콜백 함수(pepfx.h)

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 반환합니다. 가능한 오류 반환 값에는 다음 상태 코드가 포함됩니다.

반환 값 묘사
STATUS_INVALID_PARAMETER
Halt 매개 변수는 NULL입니다. 또는 잘못된 플래그 값이 Flags; 에 지정되었습니다. 또는 플래그 플래그 비트의 잘못된 조합이 포함되어 있습니다. 자세한 내용은 비고를 참조하세요.
STATUS_UNSUCCESSFUL
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

    프로세서 하드웨어 컨텍스트가 손실되는 유휴 상태(따라서 다중 프로세서 주차 프로토콜 사용하여 유휴 상태를 종료하고 운영 체제로 제어를 반환)는 캐시 일관성 상태가 아닙니다.

Flags 매개 변수에 잘못된 플래그 비트 조합이 포함된 경우 ProcessorHalt 실패하고 STATUS_INVALID_PARAMETER 반환합니다.

PEP는 IRQL <= HIGH_LEVEL 이 루틴을 호출할 수 있습니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 10부터 지원됩니다.
대상 플랫폼 Windows
헤더 pepfx.h(Pep_x.h 포함)
IRQL <= HIGH_LEVEL

참고 항목

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE