다음을 통해 공유


PO_FX_DEVICE_V3 구조체(wdm.h)

PO_FX_DEVICE_V3 구조는 PoFx(전원 관리 프레임워크), DFx(Directed PoFx)에 대한 디바이스의 전원 특성을 설명합니다.

구문

typedef struct _PO_FX_DEVICE_V3 {
  ULONG                                      Version;
  ULONGLONG                                  Flags;
  PPO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK ComponentActiveConditionCallback;
  PPO_FX_COMPONENT_IDLE_CONDITION_CALLBACK   ComponentIdleConditionCallback;
  PPO_FX_COMPONENT_IDLE_STATE_CALLBACK       ComponentIdleStateCallback;
  PPO_FX_DEVICE_POWER_REQUIRED_CALLBACK      DevicePowerRequiredCallback;
  PPO_FX_DEVICE_POWER_NOT_REQUIRED_CALLBACK  DevicePowerNotRequiredCallback;
  PPO_FX_POWER_CONTROL_CALLBACK              PowerControlCallback;
  PPO_FX_DIRECTED_POWER_UP_CALLBACK          DirectedPowerUpCallback;
  PPO_FX_DIRECTED_POWER_DOWN_CALLBACK        DirectedPowerDownCallback;
  ULONG                                      DirectedFxTimeoutInSeconds;
  PVOID                                      DeviceContext;
  ULONG                                      ComponentCount;
  PO_FX_COMPONENT_V2                         Components[ANYSIZE_ARRAY];
} PO_FX_DEVICE_V3, *PPO_FX_DEVICE_V3;

멤버

Version

이 구조체의 버전 번호입니다. 드라이버가 DFx에 직접 전원 지원을 등록하는 경우 이 멤버를 PO_FX_VERSION_V3 설정합니다.

Flags

직접 자식 디바이스 및 전원 자식 디바이스가 Directed PoFx를 옵트아웃할 수 있는지 여부를 제어합니다.

가능한 플래그 값은 다음과 같습니다.

플래그 설명
PO_FX_DEVICE_FLAG_DIRECT_CHILDREN_OPTIONAL 이 디바이스의 직접 자식 디바이스에서 선택적으로 Directed PoFx를 지원할 수 있습니다. 설정되지 않은 경우 모든 직접 자식은 Directed PoFx를 완전히 지원하려면 이 디바이스에 대한 Directed PoFx를 지원해야 합니다.
PO_FX_DEVICE_FLAG_POWER_CHILDREN_OPTIONAL 이 디바이스의 전원 자식 디바이스에서 선택적으로 Directed PoFx를 지원할 수 있습니다. 제공되지 않은 경우 모든 전원 자식은 Directed PoFx를 완전히 지원하려면 이 디바이스에 대한 Directed PoFx를 지원해야 합니다.
PO_FX_DEVICE_FLAG_DFX_CHILDREN_OPTIONAL PO_FX_DEVICE_FLAG_DIRECT_CHILDREN_OPTIONALPO_FX_DEVICE_FLAG_POWER_CHILDREN_OPTIONAL 모두 설정합니다.
PO_FX_DEVICE_FLAG_DISABLE_FAST_RESUME 최대 절전 모드 또는 절전 모드와 같은 시스템 상태에서 다시 시작 시 D0-IRP 전에 S0-IRP가 완료되지 않도록 PoFx를 강제로 적용합니다. PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME 함께 사용할 수 없습니다.
PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME 최대 절전 모드 또는 절전 모드와 같은 시스템 상태에서 다시 시작할 때 D0-IRP 전에 S0-IRP를 완료하도록 PoFx를 강제로 허용합니다. PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME 함께 사용할 수 없습니다.

ComponentActiveConditionCallback

디바이스 드라이버에서 구현하는 ComponentActiveConditionCallback 콜백 루틴에 대한 포인터입니다.

ComponentIdleConditionCallback

디바이스 드라이버에서 구현하는 ComponentIdleConditionCallback 콜백 루틴에 대한 포인터입니다.

ComponentIdleStateCallback

디바이스 드라이버에서 구현하는 ComponentIdleStateCallback 콜백 루틴에 대한 포인터입니다.

DevicePowerRequiredCallback

디바이스 드라이버에서 구현하는 DevicePowerRequiredCallback 콜백 루틴에 대한 포인터입니다.

DevicePowerNotRequiredCallback

디바이스 드라이버에서 구현하는 DevicePowerNotRequiredCallback 콜백 루틴에 대한 포인터입니다.

PowerControlCallback

디바이스 드라이버에서 구현하는 PowerControlCallback 콜백 루틴에 대한 포인터입니다.

DirectedPowerUpCallback

디바이스 드라이버에서 구현하는 PO_FX_DIRECTED_POWER_UP_CALLBACK 콜백 루틴에 대한 포인터입니다. 디바이스는 PoFx에 등록할 DirectedPower* 때 콜백만 제공할 수 있습니다. PoFx 콜백의 나머지 부분을 구현할 필요가 없습니다.

DirectedPowerDownCallback

디바이스 드라이버에서 구현하는 PO_FX_DIRECTED_POWER_DOWN_CALLBACK 콜백 루틴에 대한 포인터입니다.

DirectedFxTimeoutInSeconds

소프트웨어 활동이 더 이상 존재하지 않는 후 디바이스가 유휴 상태여야 하는 권장 시간 제한(초)을 지정하는 프레임워크에 힌트를 제공합니다. 기본값은 2분입니다.

DeviceContext

호출자가 할당한 디바이스 컨텍스트에 대한 포인터입니다. 이 포인터는 이 구조체에서 가리키는 각 드라이버 구현 콜백 함수에 매개 변수로 전달됩니다. 디바이스 드라이버는 이 컨텍스트를 사용하여 디바이스의 현재 전원 상태에 대한 정보를 저장합니다. 이 컨텍스트는 PoFx에 불투명합니다.

ComponentCount

구성 요소 배열의 요소 수입니다 . 또한 이 멤버는 디바이스의 구성 요소 수를 지정합니다.

Components[ANYSIZE_ARRAY]

이 멤버는 하나 이상의 PO_FX_COMPONENT_V2 요소 배열에서 첫 번째 요소입니다. 배열에 둘 이상의 요소가 포함된 경우 추가 요소는 PO_FX_DEVICE_V2 구조체 바로 뒤에 옵니다. 배열에는 디바이스의 각 구성 요소에 대해 하나의 요소가 포함됩니다. 각 구성 요소의 Fx 전원 상태는 디바이스에 있는 다른 구성 요소의 Fx 전원 상태와 독립적으로 제어할 수 있습니다. ANYSIZE_ARRAY 상수는 Ntdef.h 헤더 파일에서 1로 정의됩니다.

설명

PoFx에 디바이스를 등록하기 위해 드라이버는 PoFxRegisterDevice 루틴을 호출하고 디바이스를 설명하는 PO_FX_DEVICE 구조에 대한 포인터를 매개 변수로 제공합니다. DFx가 아닌 PoFx를 사용하려면 PO_FX_DEVICE_V2 구조체 또는 PO_FX_DEVICE_V3 구조를 사용하여 PoFx에 등록합니다.

Components 배열의 각 요소는 디바이스에 있는 한 구성 요소의 전원 상태 특성을 설명합니다. 디바이스의 각 구성 요소는 해당 구성 요소 배열 인덱스로 식별됩니다. PoFxActivateComponentPoFxCompleteIdleCondition과 같은 루틴은 구성 요소의 배열 인덱스를 사용하여 구성 요소를 식별합니다.

디바이스 드라이버는 8개의 콜백 루틴을 모두 구현할 필요가 없습니다. 드라이버가 해당 콜백 루틴을 구현하지 않는 경우 드라이버는 PO_FX_DEVICE 구조의 함수 포인터를 NULL로 설정할 수 있습니다. 그러나 특정 콜백 루틴을 구현해야 합니다. 특히 디바이스의 하나 이상의 구성 요소에 둘 이상의 Fx 상태가 있는 경우 드라이버는 ComponentIdleStateCallback, ComponentActiveConditionCallbackComponentIdleConditionCallback 루틴을 구현해야 합니다. 그렇지 않으면 디바이스 등록이 실패하고 PoFxRegisterDevice가STATUS_INVALID_PARAMETER 반환합니다.

드라이버가 PO_FX_DEVICE_FLAG_DISABLE_FAST_RESUME 중 하나를 제공하지 않거나 PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME 경우 시스템은 플랫폼의 기본 구성으로 대체됩니다. 기본 구성은 x86/x64 플랫폼에 PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME ARM32/ARM64 플랫폼의 경우 PO_FX_DEVICE_FLAG_DISABLE_FAST_RESUME . 이러한 플래그는 Win11 22000 이상에 대해서만 적용되며 이전 릴리스에서는 자동으로 무시됩니다. WDF 드라이버의 경우 WDF_POWER_FRAMEWORK_SETTINGS PoFxDeviceFlags 필드를 사용하여 이러한 플래그를 제공할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10, 버전 1903
머리글 wdm.h

추가 정보

/windows-hardware/drivers/kernel/introduction-to-the-directed-power-management-framework

ComponentActiveConditionCallback

ComponentIdleConditionCallback

ComponentIdleStateCallback

DevicePowerNotRequiredCallback

DevicePowerRequiredCallback

PO_FX_COMPONENT

PoFxActivateComponent

PoFxCompleteIdleCondition

PoFxRegisterDevice

PowerControlCallback