Função PoFxIdleComponent (wdm.h)
A rotina PoFxIdleComponent diminui a contagem de referência de ativação no componente especificado.
Sintaxe
void PoFxIdleComponent(
[in] POHANDLE Handle,
[in] ULONG Component,
[in] ULONG Flags
);
Parâmetros
[in] Handle
Um identificador que representa o registro do dispositivo com a PoFx (estrutura de gerenciamento de energia). O driver de dispositivo recebeu anteriormente esse identificador da rotina PoFxRegisterDevice .
[in] Component
O índice que identifica o componente. Esse parâmetro é um índice na matriz Components na estrutura PO_FX_DEVICE que o driver de dispositivo usou para registrar o dispositivo com PoFx. Se a matriz Components contiver N elementos, os índices de componentes variam de 0 a N–1.
[in] Flags
Os sinalizadores para a operação ociosa. Defina esse membro como zero ou como um dos seguintes sinalizadores PO_FX_FLAG_XXX bits:
- PO_FX_FLAG_BLOCKING
- PO_FX_FLAG_ASYNC_ONLY
Retornar valor
Nenhum
Comentários
Um driver de dispositivo chama PoFxIdleComponent para liberar uma referência de ativação para um componente em um dispositivo. O driver obteve a referência de ativação em uma chamada anterior para a rotina PoFxActivateComponent . O driver deve conter uma referência de ativação em um componente somente enquanto o driver precisa acessar o componente. Manter uma referência de ativação em um componente que não está sendo usado impede que o componente entre em um estado fx de baixa potência.
Se o driver não tiver outras referências de ativação para o componente, PoFxIdleComponent iniciará uma transição da condição ativa para a condição ociosa. Quando essa transição for concluída, a PoFx chamará a rotina ComponentIdleConditionCallback do driver para notificar o driver. Se o driver reter uma ou mais referências de ativação adicionais no componente, o componente permanecerá na condição ativa e a rotina ComponentIdleConditionCallback não será chamada.
O PoFx mantém uma contagem de referência de ativação para cada componente no dispositivo. A rotina PoFxActivateComponent incrementa essa contagem e PoFxIdleComponent a diminui. O componente permanece na condição ativa enquanto essa contagem é diferente de zero. Quando o driver libera sua última referência de ativação para um componente, a contagem diminui para zero e o componente entra na condição ociosa. Depois que o componente entra na condição ociosa, o PoFx pode potencialmente alternar o componente para um estado fx de baixa potência. Para obter mais informações, consulte PoFxActivateComponent.
Se Flags = PO_FX_FLAG_BLOCKING, a chamada PoFxIdleComponent será síncrona. Nesse caso, PoFxIdleComponent aguarda o retorno até que o componente conclua a transição para a condição ociosa. PoFxIdleComponent chama a rotina de retorno de chamada ComponentIdleConditionCallback do driver para informar ao driver que o componente está na condição ociosa. Esse retorno de chamada ocorre no mesmo thread que a chamada para PoFxIdleComponent e PoFxIdleComponent retorna somente após o retorno de chamada ComponentIdleConditionCallback retornar.
Se Flags = PO_FX_FLAG_ASYNC_ONLY, a chamada PoFxIdleComponent será assíncrona. Nesse caso, PoFxIdleComponent agenda o retorno de chamada ComponentIdleConditionCallback para ocorrer em outro thread e retorna sem esperar que o retorno de chamada ocorra. O retorno de chamada pode ocorrer antes ou depois do retorno de PoFxIdleComponent . O driver deve contar com o retorno de chamada ComponentIdleConditionCallback para determinar quando o componente conclui a transição para a condição ociosa. Até que esse retorno de chamada ocorra, o driver deve assumir que o componente ainda pode estar na condição ativa.
O driver pode definir Flags = 0 para indicar que não se importa se a chamada PoFxIdleComponent é síncrona ou assíncrona. Nesse caso, a PoFx decide se deseja tornar a chamada síncrona ou assíncrona.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 8. |
Plataforma de Destino | Universal |
Cabeçalho | wdm.h |
Biblioteca | Ntoskrnl.lib |
DLL | Ntoskrnl.exe |
IRQL | <= DISPATCH_LEVEL |