PoFxRegisterComponentPerfStates 함수(wdm.h)

PoFxRegisterComponentPerfStates 루틴은 PoFx(전원 관리 프레임워크)에서 성능 상태 관리를 위한 디바이스 구성 요소를 등록합니다.

구문

NTSTATUS PoFxRegisterComponentPerfStates(
  [in]  POHANDLE                             Handle,
  [in]  ULONG                                Component,
  [in]  ULONGLONG                            Flags,
  [in]  PPO_FX_COMPONENT_PERF_STATE_CALLBACK ComponentPerfStateCallback,
  [in]  PPO_FX_COMPONENT_PERF_INFO           InputStateInfo,
  [out] PPO_FX_COMPONENT_PERF_INFO           *OutputStateInfo
);

매개 변수

[in] Handle

PoFx를 사용하여 디바이스 등록을 나타내는 핸들입니다. 디바이스 드라이버는 이전에 PoFxRegisterDevice 루틴에서 이 핸들을 받았습니다.

[in] Component

성능 상태를 관리할 구성 요소를 식별하는 인덱스입니다. 이 매개 변수는 디바이스 드라이버가 PoFx에 디바이스를 등록하는 데 사용한 PO_FX_DEVICE 구조의 Components 배열에 대한 인덱스입니다. Components 배열에 N 요소가 포함된 경우 구성 요소 인덱스의 범위는 0에서 N-1까지입니다.

[in] Flags

성능 상태 등록의 동작을 수정하는 플래그입니다. 이 멤버를 0으로 설정하거나 다음 플래그 PO_FX_FLAG_PERF_XXX 비트 중 하나로 설정합니다.

의미
PO_FX_FLAG_PERF_PEP_OPTIONAL
0x1
드라이버가 PEP(플랫폼 확장 플러그 인)의 도움 없이 성능 상태를 변경할 수 있거나 드라이버가 로깅 목적으로만 PoFx에 성능 상태를 등록하고 있음을 나타냅니다. 이 플래그를 설정하면 PEP가 구성 요소에 대한 성능 상태를 지원하지 않는 경우에도 PoFxRegisterComponentPerfStates 호출이 성공합니다.
PO_FX_FLAG_PERF_QUERY_ON_F0
0x2
일부 디바이스의 경우 PEP는 구성 요소를 유휴 상태일 때 구성 요소에 대한 성능 상태를 특정 성능 상태( 명목 성능 상태라고 함)로 설정해야 할 수 있습니다. 드라이버가 구성 요소에 명목 성능 상태가 포함된 경우 이 플래그를 설정합니다. 이 경우 PoFx는 PEP를 쿼리하여 구성 요소가 F0으로 전환될 때 현재 성능 상태를 확인합니다.
PO_FX_FLAG_PERF_QUERY_ON_ALL_IDLE_STATES
0x4
일부 디바이스의 경우 PEP는 유휴 상태 간에 구성 요소를 전환할 때 구성 요소에 대한 성능 상태를 특정 성능 상태( 명목 성능 상태라고 함)로 설정해야 할 수 있습니다. 드라이버가 이 구성 요소에 명목 성능 상태가 포함된 경우 이 플래그를 설정합니다. 이 경우 PoFx는 PEP를 쿼리하여 구성 요소가 유휴 상태 간에 전환될 때 현재 성능 상태를 확인합니다.

[in] ComponentPerfStateCallback

ComponentPerfStateCallback 루틴에 대한 포인터입니다. 이 루틴은 PoFx가 로깅을 완료하고 PoFxIssueComponentPerfStateChange 또는 PoFxIssueComponentPerfStateChangeMultiple에 대한 드라이버 호출에 의해 시작되는 성능 상태 전환에 대해 PEP에 알릴 때 호출됩니다. 이 콜백은 모든 구성 요소 및 모든 디바이스에 대해 동일할 수 있습니다. PoFx는 각 완료 호출에서 디바이스 핸들 및 구성 요소 인덱스를 제공합니다.

[in] InputStateInfo

드라이버가 성능 상태 정보를 제공하는 경우 이 매개 변수에는 PoFx에 성능 상태 정보를 제공하는 드라이버 할당 PO_FX_COMPONENT_PERF_INFO 구조체에 대한 포인터가 포함됩니다. 드라이버에 PEP의 성능 상태 정보가 필요한 경우 이 매개 변수를 NULL로 설정해야 합니다.

[out] OutputStateInfo

드라이버에 PEP의 성능 상태 정보가 필요한 경우 등록이 성공한 후 이 매개 변수에는 PEP에서 정의한 성능 상태 정보를 제공하는 PO_FX_COMPONENT_PERF_INFO 구조에 대한 포인터가 포함됩니다. 드라이버에서 성능 상태 정보를 제공하는 경우 이 매개 변수를 NULL로 설정해야 합니다.

이 매개 변수에 할당된 메모리는 PoFx에서 관리되며, 디바이스가 제거될 때 드라이버는 이 메모리를 해제하지 않아야 합니다. 이 메모리의 수명은 이러한 성능 상태 집합을 포함하는 PoFx 구성 요소의 수명을 초과하도록 보장됩니다.

반환 값

PoFx가 디바이스의 성능 상태 등록을 수락하면 PoFxRegisterComponentPerfStatesSTATUS_SUCCESS 반환합니다. 필요한 정보가 제공되지 않거나 올바르지 않으면 STATUS_SUCCESS 이외의 반환 코드로 등록이 실패합니다. 가능한 오류 반환 값에는 다음 상태 코드가 포함됩니다.

반환 코드 설명
STATUS_NOT_IMPLEMENTED
Flags 매개 변수에는 PO_FX_FLAG_PERF_PEP_OPTIONAL 플래그가 포함되지 않으며 PEP는 이 디바이스에 대한 성능 상태 관리를 제공할 수 없습니다.
STATUS_INVALID_PARAMETER
InputStateInfoOutputStateInfo는 모두 NULL이거나 이러한 매개 변수 둘 다 NULL이 아니거나 inputStateInfo 매개 변수에 할당된 PO_FX_COMPONENT_PERF_INFO 구조체에 성능 상태 집합이 없습니다.

설명

PoFx는 디바이스의 구조를 메모리에 심층 복사합니다.

드라이버 또는 PEP(플랫폼 확장 플러그 인)는 각 구성 요소에서 지원하는 성능 상태에 대한 정보를 제공할 수 있습니다.

  • 드라이버가 성능 상태 정보를 제공하는 경우 드라이버는 InputStateInfo 매개 변수를 성능 상태 정보를 포함하는 PO_FX_COMPONENT_PERF_INFO 구조체에 대한 포인터로 설정해야 합니다. 그렇지 않으면 드라이버는 이 매개 변수를 NULL로 설정해야 합니다.
  • PEP가 성능 상태 정보를 제공하는 경우 드라이버는 OutputStateInfo 매개 변수를 성능 상태 정보를 수신하는 PO_FX_COMPONENT_PERF_INFO 구조체에 대한 유효한 포인터로 설정해야 합니다. 그렇지 않으면 드라이버는 이 매개 변수를 NULL로 설정해야 합니다.
PEP가 성능 상태를 지원하지 않는 경우 드라이버는 로깅 목적으로만 PoFx에 성능 상태 지원을 등록할 수 있습니다.

드라이버가 로깅 목적으로만 성능 상태 지원을 등록하거나 성능 상태 관리에 대한 PEP 지원 여부에 관계없이 드라이버가 올바르게 작동할 수 있는 경우 드라이버는 Flags 매개 변수에서 PO_FX_FLAG_PERF_PEP_OPTIONAL 플래그를 설정해야 합니다. 플래그가 설정되면 PEP가 성능 상태에 대한 지원을 제공하지 않더라도 등록 호출이 성공합니다.

드라이버에서 성능 상태 정보를 제공하기 위해 PEP가 필요한 경우 드라이버는 Flags 매개 변수에서 PO_FX_FLAG_PERF_PEP_OPTIONAL 플래그를 설정할 수 없습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 사용하여 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h
라이브러리 Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= APC_LEVEL

추가 정보

ComponentPerfStateCallback

디바이스 성능 상태 관리

PO_FX_COMPONENT_PERF_INFO

PoFxRegisterDevice