Функция 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

Индекс, определяющий компонент, состояние производительности которого будет управляться. Этот параметр представляет собой индекс в массив компонентов в структуре PO_FX_DEVICE , которую драйвер устройства использовал для регистрации устройства в PoFx. Если массив компонентов содержит N-элементы, индексы компонентов варьируются от 0 до N–1.

[in] Flags

Флаги, изменяющие поведение регистрации состояния производительности. Задайте для этого элемента значение нулю или одному из следующих флагов PO_FX_FLAG_PERF_XXXX бит:

Ценность Meaning
PO_FX_FLAG_PERF_PEP_OPTIONAL
0x1
Указывает, что драйвер может изменять состояния производительности без помощи подключаемого модуля расширения платформы (PEP) или регистрировать состояния производительности только в PoFx для ведения журнала. Если этот флаг задан, вызов PoFxRegisterComponentPerfStates по-прежнему будет выполнен успешно, если PEP не поддерживает состояния производительности компонента.
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 завершило ведение журнала и уведомляет PEP о переходе состояния производительности, инициируемого вызовом драйвера к PoFxIssueComponentPerfStateChange или PoFxIssueComponentPerfStateChangeMultiple. Этот обратный вызов может быть одинаковым для всех компонентов и всех устройств; PoFx предоставляет дескриптор устройства и индекс компонентов в каждом вызове завершения.

[in] InputStateInfo

Если драйвер предоставляет сведения о состоянии производительности, этот параметр содержит указатель на драйвер, выделенный PO_FX_COMPONENT_PERF_INFO структуру, которая предоставляет сведения о состоянии производительности в PoFx. Если драйверу требуются сведения о состоянии производительности из PEP, этот параметр должен иметь значение NULL.

[out] OutputStateInfo

Если драйверу требуется информация о состоянии производительности из PEP, после успешной регистрации этот параметр содержит указатель на структуру PO_FX_COMPONENT_PERF_INFO , которая предоставляет сведения о состоянии производительности, определенные PEP. Если драйвер предоставляет сведения о состоянии производительности, этот параметр должен иметь значение NULL.

Память, выделенная для этого параметра, управляется PoFx, и драйвер не должен освободить эту память при удалении устройства. Время существования этой памяти гарантированно превышает время существования компонента PoFx, содержащего эти наборы состояний производительности.

Возвращаемое значение

PoFxRegisterComponentPerfStates возвращает STATUS_SUCCESS если PoFx принимает регистрацию состояний производительности устройства. Если какая-либо из необходимых сведений не указана или неправильная, регистрация завершится ошибкой с кодом возврата, отличного от STATUS_SUCCESS. Возможные значения возвращаемых ошибок включают следующие коды состояния.

Код возврата Description
STATUS_NOT_IMPLEMENTED
Параметр Flags не включает флаг PO_FX_FLAG_PERF_PEP_OPTIONAL , а PEP не может предоставлять управление состоянием производительности для этого устройства.
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР
InputStateInfo и OutputStateInfo имеют значение NULL или оба этих параметра не имеют значения NULL, или в структуре PO_FX_COMPONENT_PERF_INFO, назначенной параметру InputStateInfo, отсутствуют наборы состояний производительности.

Замечания

Обратите внимание, что PoFx выполняет глубокую копию структур устройства в память.

Драйвер или подключаемый модуль расширения платформы (PEP) может предоставлять сведения о состояниях производительности, поддерживаемых каждым компонентом:

  • Если драйвер предоставляет сведения о состоянии производительности, драйвер должен задать параметр InputStateInfo указателем на структуру PO_FX_COMPONENT_PERF_INFO , содержащую сведения о состоянии производительности. В противном случае драйвер должен задать для этого параметра значение NULL.
  • Если PEP предоставляет сведения о состоянии производительности, драйвер должен задать параметр OutputStateInfo допустимым указателем на структуру PO_FX_COMPONENT_PERF_INFO , которая получает сведения о состоянии производительности. В противном случае драйвер должен задать для этого параметра значение NULL.
Если PEP не поддерживает состояния производительности, драйвер может зарегистрировать для поддержки состояния производительности только в PoFx для ведения журнала.

Если драйвер регистрирует поддержку состояния производительности только для ведения журнала или если драйвер может работать правильно с поддержкой PEP для управления состоянием производительности, драйвер должен задать флаг PO_FX_FLAG_PERF_PEP_OPTIONAL в параметре Flags . Если флаг задан, вызов регистрации завершится успешно, даже если PEP не обеспечивает поддержку состояний производительности.

Если драйверу требуется PEP для предоставления сведений о состоянии производительности, драйвер не может задать флаг PO_FX_FLAG_PERF_PEP_OPTIONAL в параметре Flags .

Требования

Требование Ценность
Минимальный поддерживаемый клиент Доступно начиная с Windows 10.
целевая платформа Всеобщий
Header wdm.h
Library Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= APC_LEVEL

См. также

ComponentPerfStateCallback

Управление состоянием производительности устройства

PO_FX_COMPONENT_PERF_INFO

PoFxRegisterDevice