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_OPTIONAL 및 PO_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 배열의 각 요소는 디바이스에 있는 한 구성 요소의 전원 상태 특성을 설명합니다. 디바이스의 각 구성 요소는 해당 구성 요소 배열 인덱스로 식별됩니다. PoFxActivateComponent 및 PoFxCompleteIdleCondition과 같은 루틴은 구성 요소의 배열 인덱스를 사용하여 구성 요소를 식별합니다.
디바이스 드라이버는 8개의 콜백 루틴을 모두 구현할 필요가 없습니다. 드라이버가 해당 콜백 루틴을 구현하지 않는 경우 드라이버는 PO_FX_DEVICE 구조의 함수 포인터를 NULL로 설정할 수 있습니다. 그러나 특정 콜백 루틴을 구현해야 합니다. 특히 디바이스의 하나 이상의 구성 요소에 둘 이상의 Fx 상태가 있는 경우 드라이버는 ComponentIdleStateCallback, ComponentActiveConditionCallback 및 ComponentIdleConditionCallback 루틴을 구현해야 합니다. 그렇지 않으면 디바이스 등록이 실패하고 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