estrutura PO_FX_COMPONENT_V2 (wdm.h)

A estrutura PO_FX_COMPONENT descreve os atributos de estado de energia de um componente em um dispositivo.

Sintaxe

typedef struct _PO_FX_COMPONENT_V2 {
  GUID                        Id;
  ULONGLONG                   Flags;
  ULONG                       DeepestWakeableIdleState;
  ULONG                       IdleStateCount;
  PPO_FX_COMPONENT_IDLE_STATE IdleStates;
  ULONG                       ProviderCount;
  PULONG                      Providers;
} PO_FX_COMPONENT_V2, *PPO_FX_COMPONENT_V2;

Membros

Id

Uma ID de componente que identifica exclusivamente esse componente em relação aos outros componentes no dispositivo. O driver deve especificar um valor diferente de zero para esse membro se a PoFx (estrutura de gerenciamento de energia) exigir uma ID de componente para distinguir esse componente de outros componentes semelhantes no mesmo dispositivo. Esse membro é opcional. Se esse membro não for usado, ele deverá ser definido como todos os zeros.

Flags

Esse membro pode ser definido como o seguinte bit de sinalizador: PO_FX_COMPONENT_FLAG_F0_ON_DX. Para obter mais informações, consulte Comentários.

DeepestWakeableIdleState

O índice do estado fx mais profundo do qual o componente pode ser ativado. Especifique 0 para F0, 1 para F1 e assim por diante. Esse índice deve ser menor que IdleStateCount.

IdleStateCount

O número de elementos na matriz que é apontado pelo membro IdleStates . Além disso, esse membro especifica o número de estados de energia fx aos quais o componente dá suporte. Um componente deve dar suporte a pelo menos um estado fx (F0).

IdleStates

Um ponteiro para uma matriz PO_FX_COMPONENT_IDLE_STATE . O comprimento dessa matriz é especificado pelo membro IdleStateCount . Cada elemento de matriz especifica os atributos de um estado de energia Fx com suporte do componente. O elemento 0 descreve F0, o elemento 1 descreve F1 e assim por diante.

ProviderCount

Um valor que especifica o número de componentes dos quais esse componente depende. Para obter mais informações, consulte Dependências de componentes em Comentários.

Providers

Um ponteiro para uma matriz de índices de componentes dos quais esse componente depende. Para obter mais informações, consulte Dependências de componentes em Comentários.

Comentários

Quando um driver de dispositivo registra um dispositivo com PoFx, o driver fornece uma estrutura PO_FX_DEVICE que contém as informações de registro. Essa estrutura contém uma matriz de estruturas PO_FX_COMPONENT . Os elementos nessa matriz descrevem os atributos de energia dos componentes individuais no dispositivo. A PoFx usa as informações nessa matriz para gerenciar as configurações de energia desses componentes.

O membro ID contém uma ID de componente que PoFx pode usar para identificar exclusivamente um componente. Não confunda a ID do componente com o índice do componente, que uma rotina como PoFxActivateComponent usa para identificar um componente em um dispositivo registrado. Um índice de componente é 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 serão valores inteiros no intervalo de 0 a N a 1. Por outro lado, uma ID de componente é um valor GUID.

O membro Flags poderá ser definido como o valor PO_FX_COMPONENT_FLAG_F0_ON_DX se o driver tiver especificado suporte para PO_FX_VERSION_V2 durante o registro com PoFx (ou seja, durante a chamada para a rotina PoFxRegisterDevice , o driver especificou o valor PO_FX_VERSION_V2 para o membro Version da estrutura PO_FX_DEVICE que foi passada para o parâmetro Device ). Se o sinalizador PO_FX_COMPONENT_FLAG_F0_ON_DX for especificado, o PoFx colocará o componente no estado de energia F0 durante as transições Dx e para IRPs de espera/ativação. Antes de expedir um IRP Dx ou aguardar/ativar o IRP para a pilha do dispositivo (o que ocorrer primeiro), o power manager fará a transição do componente para o estado F0. O componente será mantido em F0 até que o IRP de ativação/espera seja cancelado ou concluído, ou o Dx IRP seja concluído e o driver tenha chamado a rotina PoFxReportDevicePoweredOn (qualquer evento que aconteça por último).

Dependências de componente

O PoFx dá suporte a dependências de componente lógico em um dispositivo (mas não em dispositivos diferentes). Durante o registro do dispositivo para cada componente, o driver pode fornecer um número (o membro ProviderCount ) e uma matriz de índices de componente (o membro Providers ) do qual esse componente depende; eles são conhecidos como provedores. A PoFx garante que o componente não se tornará ativo até que todos os seus provedores estejam ativos.

As dependências de componente formam um grafo direcionado em que uma borda aponta de um componente dependente para um provedor e representa uma dependência. Durante o registro do dispositivo, o PoFx valida o grafo de dependência: ciclos e bordas repetidas não são permitidos e a profundidade do grafo para a passagem de pesquisa de profundidade não pode exceder quatro. PoFx também define a contagem de referência ativa dos componentes de acordo com o grafo de dependência; ou seja, a contagem de referência ativa de cada provedor é incrementada uma vez para cada componente que depende dela.

Durante a ativação do componente, o PoFx ativa de forma assíncrona todos os provedores primeiro. Depois que um componente estiver ativo, a PoFx verificará todos os componentes dependentes e continuará sua ativação, se necessário.

Quando o componente faz a transição para o estado ocioso, o PoFx primeiro torna os componentes dependentes ociosos. Depois que o driver conclui o ComponentIdleConditionCallback e o PEP (plug-in de extensão de plataforma) é notificado de que o componente está ocioso, o PoFx percorre recursivamente o grafo de dependência na passagem de largura e ociosa de forma assíncrona a cada provedor.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte a partir do Windows 8.
Cabeçalho wdm.h (include Wudfwdm.h)

Confira também

Gerenciamento de energia no nível do componente

PO_FX_COMPONENT_IDLE_STATE

PO_FX_DEVICE