функция обратного вызова PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK (wdm.h)
Подпрограмма обратного вызова ComponentIdleConditionCallback уведомляет драйвер о том, что указанный компонент завершил переход от активного условия к условию простоя.
Синтаксис
PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK PoFxComponentIdleConditionCallback;
void PoFxComponentIdleConditionCallback(
[in] PVOID Context,
[in] ULONG Component
)
{...}
Параметры
[in] Context
Указатель на контекст устройства. Драйвер устройства использует этот контекст для хранения сведений о текущем состоянии питания устройства. Драйвер устройства указал этот указатель в элементе DeviceContextструктуры PO_FX_DEVICE , которую драйвер использовал для регистрации устройства с помощью платформы управления питанием (PoFx). Этот контекст непрозрачн для PoFx.
[in] Component
Индекс, идентифицирующий компонент. Этот параметр представляет собой индекс массива Components в структуре PO_FX_DEVICE , используемой драйвером устройства для регистрации устройства в PoFx. Если массив Components содержит N элементов, индексы компонентов варьируются от 0 до N–1.
Возвращаемое значение
None
Remarks
Если драйверу больше не требуется доступ к компоненту, который находится в активном состоянии, драйвер должен вызвать подпрограмму PoFxIdleComponent , чтобы переключить компонент на условие простоя. В ответ на вызов PoFxIdleComponent PoFx инициирует переход к условию простоя, а затем вызывает подпрограмму ComponentIdleConditionCallback , чтобы уведомить драйвер о завершении этого перехода.
Драйвер должен вызывать PoFxCompleteIdleCondition в ответ на каждый обратный вызов ComponentIdleConditionCallback . Вызов PoFxCompleteIdleCondition может выполняться во время обратного вызова ComponentIdleConditionCallback или после возврата обратного вызова. Драйвер должен выполнить любую работу, требующую доступа к аппаратному компоненту перед вызовом PoFxCompleteIdleCondition. После этого вызова компонент может не оставаться в состоянии питания F0.
К компоненту можно получить безопасный доступ, только если компонент находится в активном состоянии. Не полагайтесь на состояние мощности Fx компонента, чтобы определить, можно ли получить доступ к компоненту. Если компонент находится в состоянии F0 и находится в состоянии простоя, компонент может перейти в другое состояние Fx.
Примеры
Чтобы определить подпрограмму обратного вызова ComponentIdleConditionCallback , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова ComponentIdleConditionCallback с именем MyComponentIdleConditionCallback
, используйте тип PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK, как показано в следующем примере кода:
PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK MyComponentIdleConditionCallback;
Затем реализуйте процедуру обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MyComponentIdleConditionCallback(
PVOID Context,
ULONG Component
)
{
// Function body
}
Тип функции PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_
в определение функции. Заметка _Use_decl_annotations_
гарантирует использование заметок, которые применяются к PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK типу функции в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_
см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается начиная с Windows 8. |
Целевая платформа | Персональный компьютер |
Верхняя часть | wdm.h (включая Wudfwdm.h) |
IRQL | Вызывается по адресу IRQL <= DISPATCH_LEVEL. |