POFXCALLBACKPROCESSORHALT 콜백 함수(pepfx.h)

ProcessorHalt 루틴은 프로세서를 중지할 준비를 합니다.

구문

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

NTSTATUS Pofxcallbackprocessorhalt(
  [in]                ULONG Flags,
  [in, out, optional] PVOID Context,
  [in]                PPROCESSOR_HALT_ROUTINE Halt
)
{...}

매개 변수

[in] Flags

프로세서가 입력할 유휴 상태의 속성을 나타내는 플래그입니다. Flags 매개 변수는 0으로 설정되거나 다음 플래그 비트 중 하나 이상의 비트 OR로 설정됩니다.

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

반환 값 Description
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

    캐시가 아닌 일관성 중지에 대해 cache-flush-override 플래그를 설정해야 합니다.

  • 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