Función PoFxIdleComponent (wdm.h)

La rutina PoFxIdleComponent disminuye el recuento de referencias de activación en el componente especificado.

Sintaxis

void PoFxIdleComponent(
  [in] POHANDLE Handle,
  [in] ULONG    Component,
  [in] ULONG    Flags
);

Parámetros

[in] Handle

Identificador que representa el registro del dispositivo con el marco de administración de energía (PoFx). El controlador de dispositivo recibió previamente este identificador de la rutina PoFxRegisterDevice .

[in] Component

Índice que identifica el componente. Este parámetro es un índice en la matriz Components de la estructura PO_FX_DEVICE que el controlador de dispositivo usó para registrar el dispositivo con PoFx. Si la matriz Components contiene N elementos, los índices de componente van de 0 a N-1.

[in] Flags

Marcas para la operación inactiva. Establezca este miembro en cero o en una de las siguientes marcas PO_FX_FLAG_XXX bits:

  • PO_FX_FLAG_BLOCKING
  • PO_FX_FLAG_ASYNC_ONLY
Estos dos bits de marca son mutuamente excluyentes. Para obtener más información, vea la sección Comentarios.

Valor devuelto

None

Observaciones

Un controlador de dispositivo llama a PoFxIdleComponent para liberar una referencia de activación a un componente de un dispositivo. El controlador obtuvo la referencia de activación en una llamada anterior a la rutina PoFxActivateComponent . El controlador debe contener una referencia de activación en un componente solo mientras el controlador necesita tener acceso al componente. Para contener una referencia de activación en un componente que no se usa impide que el componente entre en un estado Fx de bajo consumo.

Si el controlador no contiene ninguna otra referencia de activación al componente, PoFxIdleComponent inicia una transición de la condición activa a la condición inactiva. Cuando se completa esta transición, PoFx llama a la rutina ComponentIdleConditionCallback del controlador para notificar al controlador. Si el controlador conserva una o varias referencias de activación adicionales en el componente, el componente permanece en la condición activa y no se llama a la rutina ComponentIdleConditionCallback .

PoFx mantiene un recuento de referencias de activación para cada componente del dispositivo. La rutina PoFxActivateComponent incrementa este recuento y PoFxIdleComponent disminuye. El componente permanece en la condición activa mientras que este recuento es distinto de cero. Cuando el controlador libera su última referencia de activación a un componente, el recuento disminuye en cero y el componente entra en la condición de inactividad. Una vez que el componente entra en la condición de inactividad, PoFx puede cambiar el componente a un estado Fx de bajo consumo. Para obtener más información, vea PoFxActivateComponent.

Si las marcas = PO_FX_FLAG_BLOCKING, la llamada a PoFxIdleComponent es sincrónica. En este caso, PoFxIdleComponent espera a que se devuelva hasta que el componente complete la transición a la condición de inactividad. PoFxIdleComponent llama a la rutina de devolución de llamada ComponentIdleConditionCallback del controlador para informar al controlador de que el componente está en la condición inactiva. Esta devolución de llamada se produce en el mismo subproceso que la llamada a PoFxIdleComponent y PoFxIdleComponent devuelve solo después de que se devuelva la devolución de llamada ComponentIdleConditionCallback .

Si las = marcas PO_FX_FLAG_ASYNC_ONLY, la llamada a PoFxIdleComponent es asincrónica. En este caso, PoFxIdleComponent programa la devolución de llamada ComponentIdleConditionCallback para que se produzca en otro subproceso y, a continuación, devuelve sin esperar a que se produzca la devolución de llamada. La devolución de llamada puede producirse antes o después de que PoFxIdleComponent devuelva. El controlador debe basarse en la devolución de llamada ComponentIdleConditionCallback para determinar cuándo el componente completa la transición a la condición inactiva. Hasta que se produzca esta devolución de llamada, el controlador debe suponer que el componente podría estar todavía en la condición activa.

El controlador puede establecer Flags = 0 para indicar que no importa si la llamada a PoFxIdleComponent es sincrónica o asincrónica. En este caso, PoFx decide si realizar la llamada sincrónica o asincrónica.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 8.
Plataforma de destino Universal
Encabezado wdm.h
Library Ntoskrnl.lib
Archivo DLL Ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Consulte también

ComponentIdleConditionCallback

PO_FX_DEVICE

PO_FX_FLAG_XXX

PoFxActivateComponent

PoFxRegisterDevice