Função PoFxActivateComponent (wdm.h)

A rotina PoFxActivateComponent incrementa a contagem de referência de ativação no componente especificado.

Sintaxe

void PoFxActivateComponent(
  [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 de ativação. Defina esse membro como zero ou como um dos seguintes sinalizadores PO_FX_FLAG_ bitsXXX :

Esses dois bits de sinalizador são mutuamente exclusivos. Para obter mais informações, consulte Comentários.

Valor Significado
PO_FX_FLAG_BLOCKING
0x1
Torne a alteração da condição síncrona. Se esse sinalizador for definido, a rotina que solicita a alteração da condição não retornará o controle para o driver de chamada até que o hardware do componente conclua a transição para a nova condição. Esse sinalizador só poderá ser usado se o chamador estiver em execução no IRQL < DISPATCH_LEVEL.
PO_FX_FLAG_ASYNC_ONLY
0x2
Torne a condição totalmente assíncrona. Se esse sinalizador for definido, a rotina de retorno de chamada do driver de chamada será chamada de um thread diferente do thread no qual a rotina que solicita a alteração da condição será chamada. Assim, a rotina que solicita a alteração da condição sempre retorna de forma assíncrona sem esperar que o retorno de chamada seja concluído.

Retornar valor

Nenhum

Comentários

Antes que um driver de dispositivo possa acessar um componente em um dispositivo, o driver deve primeiro chamar PoFxActivateComponent para obter uma referência de ativação para o componente. Se o componente ainda não estiver na condição ativa, essa chamada iniciará uma transição da condição ociosa para a condição ativa. Quando essa transição for concluída, o PoFx chamará a rotina ComponentActiveConditionCallback do driver para notificar o driver. O driver pode acessar os registros de hardware em um componente somente quando o componente está na condição ativa.

Se o componente já estiver na condição ativa quando PoFxActivateComponent for chamado, nenhuma transição será necessária e a rotina ComponentActiveConditionCallback não será chamada.

Depois que um componente entra na condição ativa, ele permanece na condição ativa enquanto o driver mantém uma ou mais referências de ativação no componente. Para liberar uma referência de ativação, o driver chama a rotina PoFxIdleComponent . Quando o driver libera a última referência de ativação em um componente, PoFxIdleComponent inicia uma transição da condição ativa para a condição ociosa. Um componente que está na condição ociosa pode potencialmente entrar em um estado fx de baixa potência.

Se Flags = PO_FX_FLAG_BLOCKING, a chamada PoFxActivateComponent será síncrona. Se o componente já estiver na condição ativa, a chamada incrementará a contagem de referência de ativação e retornará sem esperar. Caso contrário, PoFxActivateComponent aguarda o retorno até que o componente conclua a transição para a condição ativa. Nesse caso, se o componente ainda não estiver no estado F0 quando a chamada ocorrer, PoFxActivateComponent chamará a rotina ComponentIdleStateCallback do driver para iniciar a transição para F0. Depois que o componente entra no estado F0, PoFxActivateComponent chama a rotina ComponentActiveConditionCallback do driver para informar ao driver que o componente está na condição ativa. Esses retornos de chamada ocorrem no mesmo thread que a chamada para PoFxActivateComponent e PoFxActivateComponent retorna somente após o retorno de chamada ComponentActiveConditionCallback .

Se Flags = PO_FX_FLAG_ASYNC_ONLY, a chamada PoFxActivateComponent será assíncrona. Se o componente já estiver na condição ativa, a chamada incrementará a contagem de referência de ativação e retornará. Caso contrário, PoFxActivateComponent agenda os retornos de chamada ComponentIdleStateCallback (se necessário) e ComponentActiveConditionCallback para ocorrer em outro thread e retorna sem esperar que nenhum retorno de chamada ocorra. Os retornos de chamada podem ocorrer antes ou depois que PoFxActivateComponent retorna. O driver depende do retorno de chamada ComponentActiveConditionCallback para determinar quando o componente conclui a transição para a condição ativa.

O driver pode definir Flags = 0 para indicar que não se importa se a chamada PoFxActivateComponent é síncrona ou assíncrona. Nesse caso, a PoFx decide se deseja tornar a chamada síncrona ou assíncrona.

Dois ou mais caminhos de código no mesmo driver podem precisar acessar simultaneamente um componente específico. As rotinas PoFxActivateComponent e PoFxIdleComponent usam contagens de referência de ativação para permitir que as várias partes do driver mantenham independentemente o acesso ao componente sem exigir que o driver gerencie centralmente o acesso ao componente.

O PoFx mantém uma contagem de referência de ativação para cada componente em um dispositivo. Uma chamada PoFxActivateComponent incrementa essa contagem em um e uma chamada PoFxIdleComponent diminui a contagem em um. Quando a contagem é diferente de zero, o componente está na condição ativa ou está em processo de alternância para a condição ativa. Um componente que tem uma contagem de zero está na condição ociosa ou está em processo de alternância para a condição ociosa.

Quando uma chamada PoFxActivateComponent faz com que a contagem de referência de ativação seja incrementada de 0 para 1, PoFxActivateComponent inicia uma transição da condição ociosa para a condição ativa. Quando uma chamada PoFxIdleComponent faz com que a contagem decremento de 1 para 0, PoFxIdleComponent inicia uma transição da condição ativa para a condição ociosa.

PoFx notifica o driver quando ocorre uma transição entre a condição ativa e a condição ociosa. Um retorno de chamada ComponentActiveConditionCallback notifica o driver de uma transição para a condição ativa e um retorno de chamada ComponentIdleConditionCallback notifica o driver de uma transição para a condição ociosa. Quando uma chamada PoFxActivateComponent ou PoFxIdleComponent simplesmente incrementa ou diminui a contagem de referência de ativação sem causar essa transição, o driver não recebe nenhuma notificação.

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

Confira também

ComponentActiveConditionCallback

ComponentIdleStateCallback

PO_FX_DEVICE

PoFxIdleComponent

PoFxRegisterDevice