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


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

См. также раздел

ComponentIdleConditionCallback

PO_FX_DEVICE

PO_FX_FLAG_XXX

PoFxActivateComponent

PoFxRegisterDevice