PoFxIssueComponentPerfStateChange 함수(wdm.h)

PoFxIssueComponentPerfStateChange 루틴은 디바이스 구성 요소를 특정 성능 상태에 배치하는 요청을 제출합니다.

구문

void PoFxIssueComponentPerfStateChange(
  [in] POHANDLE                 Handle,
  [in] ULONG                    Flags,
  [in] ULONG                    Component,
  [in] PPO_FX_PERF_STATE_CHANGE PerfChange,
  [in] PVOID                    Context
);

매개 변수

[in] Handle

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

[in] Flags

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

이러한 두 플래그 비트는 상호 배타적입니다. 자세한 내용은 설명 부분을 참조하세요.

의미
PO_FX_FLAG_BLOCKING
0x1
조건을 동기적으로 변경합니다. 이 플래그가 설정되면 구성 요소 하드웨어가 새 조건으로의 전환을 완료할 때까지 조건 변경을 요청하는 루틴이 호출 드라이버에 대한 제어를 반환하지 않습니다. 이 플래그는 호출자가 IRQL < DISPATCH_LEVEL 실행되는 경우에만 사용할 수 있습니다.
PO_FX_FLAG_ASYNC_ONLY
0x2
조건을 완전히 비동기식으로 변경합니다. 이 플래그가 설정되면 조건 변경을 요청하는 루틴이 호출되는 스레드가 아닌 스레드에서 호출 드라이버의 콜백 루틴이 호출됩니다. 따라서 조건 변경을 요청하는 루틴은 콜백이 완료 될 때까지 기다리지 않고 항상 비동기적으로 반환됩니다.

[in] Component

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

[in] PerfChange

구성 요소의 새 성능 상태를 나타내는 PO_FX_PERF_STATE_CHANGE 구조체에 대한 포인터입니다.

[in] Context

ComponentPerfStateCallback 콜백 루틴의 컨텍스트에 대한 포인터입니다. 이 매개 변수는 선택적 요소입니다. 드라이버 또는 디바이스 컨텍스트를 콜백 루틴에 전달할 수 있도록 제공됩니다. 이 매개 변수를 사용하지 않는 경우 NULL로 설정해야 합니다.

반환 값

없음

설명

드라이버가 PoFxIssueComponentPerfStateChange를 호출하면 PoFx(전원 관리 프레임워크)는 PEP(플랫폼 확장 플러그 인)를 요청하여 구성 요소의 성능 상태를 지정된 성능 상태로 설정합니다. 이 루틴은 불연속 및 범위 기반 유형의 성능 상태 집합과 함께 사용할 수 있습니다. 불연속 및 범위 기반 성능 상태 집합에 대한 자세한 내용은 PO_FX_PERF_STATE_TYPE 참조하세요.

플래그 = 가 PO_FX_FLAG_BLOCKING 경우 PoFxIssueComponentPerfStateChange 호출이 동기적입니다. 이 경우 PoFxIssueComponentPerfStateChange 는 구성 요소가 성능 상태 전환을 완료할 때까지 반환될 때까지 기다립니다. 드라이버의 ComponentPerfStateCallback 루틴은 구성 요소의 성능 상태 변경이 완료되었다는 것을 드라이버에 알리기 위해 호출됩니다. 이 콜백은 PoFxIssueComponentPerfStateChange 호출과 동일한 스레드에서 발생하며 , PoFxIssueComponentPerfStateChangeComponentPerfStateCallback 콜백 이 반환된 후에만 반환됩니다.

Flags = 가 PO_FX_FLAG_ASYNC_ONLY 경우 PoFxIssueComponentPerfStateChange 호출은 비동기적입니다. 이 경우 PoFxIssueComponentPerfStateChangeComponentPerfStateCallback 루틴이 다른 스레드에서 발생하도록 예약한 다음 콜백이 발생할 때까지 기다리지 않고 를 반환합니다. 콜백은 PoFxIssueComponentPerfStateChange 가 반환되기 전이나 후에 발생할 수 있습니다. 드라이버는 ComponentPerfStateCallback 루틴을 사용하여 구성 요소가 새 성능 상태로의 전환을 완료하는 시기를 결정해야 합니다.

드라이버는 Flags = 0을 설정하여 PoFxIssueComponentPerfStateChange 호출이 동기 또는 비동기인지 여부를 상관하지 않음을 나타낼 수 있습니다. 이 경우 PoFx는 PEP가 동기 또는 비동기 요청을 사용하여 구성 요소에 성능 상태 변경을 실행할지 여부에 따라 호출의 동시성을 결정합니다.

플래그 = PO_FX_FLAG_ASYNC_ONLY 또는 플래그가 전달되지 않으면 이 루틴에는 = DISPATCH_LEVEL IRQL<이 필요합니다. 플래그 = 가 PO_FX_FLAG_BLOCKING 경우 이 루틴에는 = APC_LEVEL IRQL<이 필요합니다.

이 함수는 호출의 동시성에 관계없이 항상 ComponentPerfStateCallback 루틴을 호출합니다. PEP는 성능 상태 변경 요청을 거부하도록 선택할 수 있으므로 드라이버는 성능 상태를 하드웨어에 커밋하기 전에 콜백을 받을 때까지 기다려야 합니다.

호출이 동기 또는 비동기인지에 관계없이 PoFxIssueComponentPerfStateChange 루틴의 단일 호출만 구성 요소당 한 번에 허용됩니다. 성능 상태 변경 요청을 실행한 후 드라이버는 요청에 다른 성능 상태 집합이 포함되더라도 이 루틴을 다시 호출하기 전에 ComponentPerfStateCallback 이 수신될 때까지 기다려야 합니다. ComponentPerfStateCallback이 수신될 때까지 대기하기 전에 이 루틴을 다시 호출하면 버그 검사가 발생합니다.

요구 사항

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

추가 정보

ComponentPerfStateCallback

디바이스 성능 상태 관리

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChangeMultiple

PoFxRegisterComponentPerfStates