Функция PoFxIdleComponent (wdm.h)
Подпрограмма PoFxIdleComponent уменьшает количество ссылок активации для указанного компонента.
Синтаксис
void PoFxIdleComponent(
[in] POHANDLE Handle,
[in] ULONG Component,
[in] ULONG Flags
);
Параметры
[in] Handle
Дескриптор, представляющий регистрацию устройства с помощью платформы управления питанием (PoFx). Драйвер устройства ранее получил этот дескриптор из подпрограммы PoFxRegisterDevice .
[in] Component
Индекс, идентифицирующий компонент. Этот параметр является индексом массива Components в структуре PO_FX_DEVICE , используемой драйвером устройства для регистрации устройства с помощью PoFx. Если массив Components содержит N элементов, индексы компонентов варьируются от 0 до N–1.
[in] Flags
Флаги для операции простоя. Присвойте этому элементу значение ноль или один из следующих PO_FX_FLAG_XXX битов флага:
- PO_FX_FLAG_BLOCKING
- PO_FX_FLAG_ASYNC_ONLY
Возвращаемое значение
None
Remarks
Драйвер устройства вызывает PoFxIdleComponent , чтобы освободить ссылку активации на компонент на устройстве. Драйвер получил ссылку на активацию в предыдущем вызове подпрограммы PoFxActivateComponent . Драйвер должен хранить ссылку активации на компоненте только в то время, когда драйверу требуется доступ к компоненту. Хранение ссылки на активацию в компоненте, который не используется, предотвращает переход компонента в маломощное состояние Fx.
Если драйвер не содержит других ссылок на активацию компонента, PoFxIdleComponent инициирует переход от активного условия к условию простоя. После завершения этого перехода PoFx вызывает подпрограмму ComponentIdleConditionCallback драйвера, чтобы уведомить драйвер. Если драйвер сохраняет одну или несколько дополнительных ссылок активации в компоненте, компонент остается в активном состоянии, а подпрограмма ComponentIdleConditionCallback не вызывается.
PoFx поддерживает количество ссылок активации для каждого компонента на устройстве. Подпрограмма PoFxActivateComponent увеличивает это число, а PoFxIdleComponent уменьшает его. Компонент остается в активном состоянии, пока это число не равно нулю. Когда драйвер освобождает последнюю ссылку на активацию компонента, счетчик уменьшается до нуля, и компонент переходит в условие простоя. После того как компонент перейдет в состояние простоя, PoFx может переключить компонент в маломощное состояние Fx. Дополнительные сведения см. в разделе PoFxActivateComponent.
Если флаги = PO_FX_FLAG_BLOCKING, вызов PoFxIdleComponent является синхронным. В этом случае PoFxIdleComponent ожидает возврата, пока компонент не завершит переход к условию простоя. PoFxIdleComponent вызывает подпрограмму обратного вызова ComponentIdleConditionCallback драйвера, чтобы сообщить драйверу о том, что компонент находится в состоянии простоя. Этот обратный вызов выполняется в том же потоке, что и вызов PoFxIdleComponent, а PoFxIdleComponent возвращается только после возврата обратного вызова ComponentIdleConditionCallback .
Если флаги = PO_FX_FLAG_ASYNC_ONLY, вызов PoFxIdleComponent является асинхронным. В этом случае PoFxIdleComponent планирует обратный вызов ComponentIdleConditionCallback в другом потоке, а затем возвращается, не дожидаясь обратного вызова. Обратный вызов может выполняться до или после возврата PoFxIdleComponent . Драйвер должен полагаться на обратный вызов ComponentIdleConditionCallback , чтобы определить, когда компонент завершит переход к условию простоя. Пока не произойдет этот обратный вызов, драйвер должен предполагать, что компонент может по-прежнему находиться в активном состоянии.
Драйвер может установить флаги = 0, чтобы указать, что ему не важно, является ли вызов PoFxIdleComponent синхронным или асинхронным. В этом случае PoFx решает, следует ли сделать вызов синхронным или асинхронным.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 8. |
Целевая платформа | Универсальное |
Верхняя часть | wdm.h |
Библиотека | Ntoskrnl.lib |
DLL | Ntoskrnl.exe |
IRQL | <= DISPATCH_LEVEL |