PoFxActivateComponent 함수(wdm.h)

PoFxActivateComponent 루틴은 지정된 구성 요소의 활성화 참조 횟수를 증가합니다.

구문

void PoFxActivateComponent(
  [in] POHANDLE Handle,
  [in] ULONG    Component,
  [in] ULONG    Flags
);

매개 변수

[in] Handle

PoFx(전원 관리 프레임워크)를 사용하여 디바이스 등록을 나타내는 핸들입니다. 디바이스 드라이버는 이전에 PoFxRegisterDevice 루틴에서 이 핸들을 받았습니다.

[in] Component

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

[in] Flags

활성화 작업의 플래그입니다. 이 멤버를 0으로 설정하거나 다음 플래그 PO_FX_FLAG_XXX 비트 중 하나로 설정합니다.

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

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

반환 값

없음

설명

디바이스 드라이버가 디바이스의 구성 요소에 액세스하려면 먼저 PoFxActivateComponent 를 호출하여 구성 요소에 대한 활성화 참조를 가져와야 합니다. 구성 요소가 아직 활성 상태에 있지 않은 경우 이 호출은 유휴 상태에서 활성 상태로의 전환을 시작합니다. 이 전환이 완료되면 PoFx는 드라이버의 ComponentActiveConditionCallback 루틴을 호출하여 드라이버에 알립니다. 드라이버는 구성 요소가 활성 상태인 경우에만 구성 요소의 하드웨어 레지스터에 액세스할 수 있습니다.

PoFxActivateComponent를 호출할 때 구성 요소가 이미 활성 상태이면 전환이 필요하지 않으며 ComponentActiveConditionCallback 루틴이 호출되지 않습니다.

구성 요소가 활성 상태로 전환되면 드라이버가 구성 요소에 대해 하나 이상의 활성화 참조를 보유하는 한 활성 상태로 유지됩니다. 활성화 참조를 해제하기 위해 드라이버는 PoFxIdleComponent 루틴을 호출합니다. 드라이버가 구성 요소에서 마지막 활성화 참조를 해제하면 PoFxIdleComponent 는 활성 조건에서 유휴 상태로의 전환을 시작합니다. 유휴 상태에 있는 구성 요소는 잠재적으로 저전력 Fx 상태로 전환될 수 있습니다.

Flags = 가 PO_FX_FLAG_BLOCKING 경우 PoFxActivateComponent 호출은 동기적입니다. 구성 요소가 이미 활성 상태인 경우 호출은 활성화 참조 수를 증가시키고 기다리지 않고 를 반환합니다. 그렇지 않으면 PoFxActivateComponent 는 구성 요소가 활성 상태로의 전환을 완료할 때까지 반환될 때까지 기다립니다. 이 경우 호출이 발생할 때 구성 요소가 아직 F0 상태에 있지 않은 경우 PoFxActivateComponent 는 드라이버의 ComponentIdleStateCallback 루틴을 호출하여 F0으로의 전환을 시작합니다. 구성 요소가 F0 상태가 된 후 PoFxActivateComponent 는 드라이버의 ComponentActiveConditionCallback 루틴을 호출하여 구성 요소가 활성 상태임을 드라이버에 알릴 수 있습니다. 이러한 콜백은 PoFxActivateComponent 호출과 동일한 스레드에서 발생하며 , PoFxActivateComponentComponentActiveConditionCallback 콜백 이 반환된 후에만 반환됩니다.

Flags = 가 PO_FX_FLAG_ASYNC_ONLY경우 PoFxActivateComponent 호출은 비동기적입니다. 구성 요소가 이미 활성 상태인 경우 호출은 활성화 참조 수를 증가시키고 를 반환합니다. 그렇지 않으면 PoFxActivateComponentComponentIdleStateCallback (필요한 경우) 및 ComponentActiveConditionCallback 콜백 이 다른 스레드에서 발생하도록 예약한 다음 콜백이 발생할 때까지 기다리지 않고 반환합니다. 콜백은 PoFxActivateComponent 가 반환되기 전이나 후에 발생할 수 있습니다. 드라이버는 ComponentActiveConditionCallback 콜백 을 사용하여 구성 요소가 활성 상태로의 전환을 완료하는 시기를 결정합니다.

드라이버는 Flags = 0을 설정하여 PoFxActivateComponent 호출이 동기 또는 비동기인지 여부를 상관하지 않음을 나타낼 수 있습니다. 이 경우 PoFx는 호출을 동기 또는 비동기로 만들지 여부를 결정합니다.

동일한 드라이버에 있는 두 개 이상의 코드 경로가 특정 구성 요소에 동시에 액세스해야 할 수 있습니다. PoFxActivateComponentPoFxIdleComponent 루틴은 활성화 참조 횟수를 사용하여 드라이버가 구성 요소에 대한 액세스를 중앙에서 관리할 필요 없이 드라이버의 다양한 부분에서 독립적으로 구성 요소에 대한 액세스를 유지할 수 있도록 합니다.

PoFx는 디바이스의 각 구성 요소에 대한 활성화 참조 수를 유지 관리합니다. PoFxActivateComponent 호출은 이 수를 1씩 증가시키고 PoFxIdleComponent 호출은 개수를 1씩 감소합니다. 개수가 0이 아니면 구성 요소가 활성 상태에 있거나 활성 상태로 전환하는 중입니다. 개수가 0인 구성 요소는 유휴 상태에 있거나 유휴 상태로 전환하는 중입니다.

PoFxActivateComponent 호출로 인해 활성화 참조 수가 0에서 1로 증가하면 PoFxActivateComponent는 유휴 상태에서 활성 상태로의 전환을 시작합니다. PoFxIdleComponent 호출로 인해 수가 1에서 0으로 감소하면 PoFxIdleComponent는 활성 조건에서 유휴 상태로의 전환을 시작합니다.

PoFx는 활성 상태와 유휴 상태 간의 전환이 발생할 때 드라이버에 알릴 수 있습니다. ComponentActiveConditionCallback 콜백은 드라이버에 활성 상태로의 전환에 대해 알리고, ComponentIdleConditionCallback 콜백은 드라이버에 유휴 상태로의 전환에 대해 알릴 수 있도록 합니다. PoFxActivateComponent 또는 PoFxIdleComponent 호출이 이러한 전환을 유발하지 않고 활성화 참조 수를 증가 또는 감소시키는 경우 드라이버는 알림을 받지 않습니다.

요구 사항

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

추가 정보

ComponentActiveConditionCallback

ComponentIdleStateCallback

PO_FX_DEVICE

PoFxIdleComponent

PoFxRegisterDevice