Поделиться через


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

Флаги, которые изменяют поведение операции изменения состояния производительности. Присвойте этому элементу значение ноль или один из следующих PO_FX_FLAG_ битовXXX:

Эти два бита флага являются взаимоисключающими. Дополнительные сведения см. в подразделе "Примечания".

Значение Значение
PO_FX_FLAG_BLOCKING
0x1
Сделайте изменение условия синхронным. Если этот флаг установлен, подпрограмма, запрашивающая изменение условия, не возвращает управление вызывающим драйвером до тех пор, пока оборудование компонента не завершит переход на новое условие. Этот флаг можно использовать только в том случае, если вызывающий объект выполняется на < DISPATCH_LEVEL IRQL.
PO_FX_FLAG_ASYNC_ONLY
0x2
Сделайте изменение условия полностью асинхронным. Если этот флаг установлен, подпрограмма обратного вызова драйвера вызывается из потока, отличного от потока, в котором вызывается подпрограмма, запрашивающая изменение условия. Таким образом, подпрограмма, запрашивающая изменение условия, всегда возвращается асинхронно, не дожидаясь завершения обратного вызова.

[in] Component

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

[in] PerfChange

Указатель на структуру PO_FX_PERF_STATE_CHANGE , представляющую новое состояние производительности компонента.

[in] Context

Указатель на контекст для подпрограммы обратного вызова ComponentPerfStateCallback . Этот параметр является необязательным. Он предоставляется для передачи контекста драйвера или устройства в подпрограмму обратного вызова. Если этот параметр не используется, ему необходимо задать значение NULL.

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

None

Remarks

Когда драйвер вызывает PoFxIssueComponentPerfStateChange, платформа управления питанием (PoFx) запрашивает подключаемый модуль расширения платформы (PEP), чтобы поместить состояние производительности компонента в указанное состояние производительности. Эта подпрограмма может использоваться как с дискретными, так и с диапазонными типами наборов состояний производительности. Дополнительные сведения о дискретных и диапазонных наборах состояний производительности см. в разделе PO_FX_PERF_STATE_TYPE.

Если флаги = PO_FX_FLAG_BLOCKING, вызов PoFxIssueComponentPerfStateChange является синхронным. В этом случае PoFxIssueComponentPerfStateChange ожидает возврата, пока компонент не завершит переход состояния производительности. Вызывается подпрограмма ComponentPerfStateCallback драйвера, чтобы сообщить драйверу о том, что изменение состояния производительности компонента завершено. Этот обратный вызов выполняется в том же потоке, что и вызов PoFxIssueComponentPerfStateChange, а PoFxIssueComponentPerfStateChange возвращает только после возврата обратного вызова ComponentPerfStateCallback .

Если флаги = PO_FX_FLAG_ASYNC_ONLY, вызов PoFxIssueComponentPerfStateChange является асинхронным. В этом случае PoFxIssueComponentPerfStateChange планирует выполнение подпрограммы ComponentPerfStateCallback в другом потоке, а затем возвращается без ожидания обратного вызова. Обратный вызов может выполняться до или после возврата PoFxIssueComponentPerfStateChange . Драйвер должен полагаться на подпрограмму ComponentPerfStateCallback , чтобы определить, когда компонент завершает переход в новое состояние производительности.

Драйвер может задать Flags = 0, чтобы указать, что ему не важно, является ли вызов PoFxIssueComponentPerfStateChange синхронным или асинхронным. В этом случае PoFx определяет синхронность вызова в зависимости от того, использует ли PEP синхронный или асинхронный запрос для выдачи изменения состояния производительности компонента.

Если флаги = PO_FX_FLAG_ASYNC_ONLY или не передаются, для этой процедуры требуется IRQL <= DISPATCH_LEVEL. Если флаги = PO_FX_FLAG_BLOCKING, для этой процедуры требуется IRQL <= APC_LEVEL.

Эта функция всегда приводит к вызову подпрограммы 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