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


функция обратного вызова PO_FX_COMPONENT_IDLE_STATE_CALLBACK (wdm.h)

Подпрограмма обратного вызова ComponentIdleStateCallback уведомляет драйвер ожидающего изменения состояния питания Fx указанного компонента.

Синтаксис

PO_FX_COMPONENT_IDLE_STATE_CALLBACK PoFxComponentIdleStateCallback;

void PoFxComponentIdleStateCallback(
  [in] PVOID Context,
  [in] ULONG Component,
  [in] ULONG State
)
{...}

Параметры

[in] Context

Указатель на контекст устройства. Драйвер устройства использует этот контекст для хранения сведений о текущем состоянии питания устройства. Драйвер устройства указал этот указатель на элемент DeviceContext член структуры PO_FX_DEVICE, которую драйвер использовал для регистрации устройства с помощью платформы управления питанием (PoFx). Этот контекст непрозрачн для PoFx.

[in] Component

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

[in] State

Указывает новое состояние питания Fx, на которое будет изменен компонент. Если этот параметр равен нулю, новое состояние — F0; Если этот параметр является одним, новое состояние — F1; и т. д.

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

Никакой

Замечания

Когда PoFx вызывает компонента ComponentIdleStateCallback, драйвер может потребоваться подготовиться к ожидающим изменению состояния Fx. После завершения подготовки драйвер должен вызвать процедуру PoFxCompleteIdleState, чтобы уведомить PoFx о том, что драйвер завершил свой ответ на обратный вызов ComponentIdleStateCallback. Вызов PoFxCompleteIdleState может выполняться либо до, либо после возврата подпрограммы компонента ComponentIdleStateCallback.

Если компонент должен переключиться с F0 на состояние низкой мощности Fx, в котором устройство потеряет аппаратное состояние компонента, драйвер должен сохранить состояние оборудования компонента перед переходом на новое состояние Fx. Если компонент должен переключаться с состояния Fx с низкой мощностью на F0, а состояние оборудования было сохранено ранее, драйвер должен восстановить состояние оборудования после восстановления питания компонента.

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

Если драйвер отвечает за настройку состояния питания компонента, драйвер должен изменить состояние питания в ответ на обратный вызов ComponentIdleStateCallback. Для перехода с F0 на состояние Fx с низкой мощностью компонент находится в F0 на входе в процедуру ComponentIdleStateCallback, и драйвер должен переключить компонент нового состояния Fx перед вызовом PoFxCompleteIdleState. Для перехода с низкой мощностью состояния Fx на F0 компонент находится в состоянии низкой мощности Fx при входе в ComponentIdleStateCallback, и драйвер должен переключить компонент на F0 перед вызовом PoFxCompleteIdleState.

Если драйвер не несет ответственности за настройку состояния питания компонента, драйвер должен предположить, что компонент всегда находится в состоянии F0 при входе в подпрограмму ComponentIdleStateCallback. Для ожидающего перехода с F0 на состояние Fx низкой мощности переход на новое состояние Fx не происходит до тех пор, пока драйвер не вызывает PoFxCompleteIdleState. Для перехода с состояния Fx с низкой мощностью на F0 переход на F0 происходит перед вызовом подпрограммы ComponentIdleStateCallback.

PoFx никогда не вызывает процедуру ComponentIdleStateCallback для переключения непосредственно из одного состояния Fx с низкой мощностью в другое состояние Fx с низкой мощностью. Например, PoFx может потребоваться переключить компонент из одного состояния Fx с низкой мощностью в другое в ответ на вызов PoFxSetComponentLatency, PoFxSetComponentResidencyили подпрограмму PoFxSetComponentWake. В этом случае PoFx сначала вызывает подпрограмму ComponentIdleStateCallback, чтобы переключиться с старого состояния Fx на F0, а затем вызывает ComponentIdleStateCallback второй раз, чтобы переключиться с F0 на новое состояние Fx.

Примеры

Чтобы определить подпрограмму обратного вызова компонента ComponentIdleStateCallback, необходимо сначала указать объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализ кода для драйверов, статический проверяющий драйвер (SDV) и другие средства проверки подлинности, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить подпрограмму обратного вызова компонента ComponentIdleStateCallback с именем MyComponentIdleStateCallback, используйте тип PO_FX_COMPONENT_IDLE_STATE_CALLBACK, как показано в этом примере кода:

PO_FX_COMPONENT_IDLE_STATE_CALLBACK MyComponentIdleStateCallback;

Затем реализуйте подпрограмму обратного вызова следующим образом:

_Use_decl_annotations_
VOID
  MyComponentIdleStateCallback(
    PVOID Context,
    ULONG Component,
    ULONG State
    )
  {
      // Function body
  }

Тип функции PO_FX_COMPONENT_IDLE_STATE_CALLBACK определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции _Use_decl_annotations_ заметку. Заметка _Use_decl_annotations_ гарантирует, что используются заметки, применяемые к типу функции PO_FX_COMPONENT_IDLE_STATE_CALLBACK в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в объявлении функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_см. в поведению функции.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается в Windows 8 и более поздних версиях Windows.
целевая платформа Настольный
заголовка wdm.h (include Wudfwdm.h)
IRQL Вызывается в IRQL <= DISPATCH_LEVEL.

См. также

PO_FX_DEVICE

PoFxCompleteIdleState

PoFxSetComponentLatency

PoFxSetComponentResidency

PoFxSetComponentWake