Função PoFxIssueComponentPerfStateChange (wdm.h)

A rotina PoFxIssueComponentPerfStateChange envia uma solicitação para colocar um componente do dispositivo em um estado de desempenho específico.

Sintaxe

void PoFxIssueComponentPerfStateChange(
  [in] POHANDLE                 Handle,
  [in] ULONG                    Flags,
  [in] ULONG                    Component,
  [in] PPO_FX_PERF_STATE_CHANGE PerfChange,
  [in] PVOID                    Context
);

Parâmetros

[in] Handle

Um identificador que representa o registro do dispositivo com PoFx. O driver do dispositivo recebeu esse identificador anteriormente da rotina PoFxRegisterDevice .

[in] Flags

Os sinalizadores que modificam o comportamento da operação de alteração do estado de desempenho. 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 condição síncrona. Se esse sinalizador estiver 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 estiver 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 de condição é chamada. Assim, a rotina que solicita a alteração da condição sempre retorna de forma assíncrona sem aguardar a conclusão do retorno de chamada.

[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 Componentes contiver N elementos, os índices de componentes variam de 0 a N-1.

[in] PerfChange

Um ponteiro para uma estrutura PO_FX_PERF_STATE_CHANGE que representa o novo estado de desempenho do componente.

[in] Context

Um ponteiro para o contexto para a rotina de retorno de chamada ComponentPerfStateCallback . Esse parâmetro é opcional. Ele é fornecido para que um contexto de driver ou dispositivo possa ser passado para a rotina de retorno de chamada. Se esse parâmetro não for usado, ele deverá ser definido como NULL.

Retornar valor

Nenhum

Comentários

Quando um driver chama PoFxIssueComponentPerfStateChange, a PoFx (estrutura de gerenciamento de energia) solicita que o PEP (plug-in de extensão de plataforma) coloque o estado de desempenho do componente definido no estado de desempenho especificado. Essa rotina pode ser usada com tipos discretos e baseados em intervalo de conjuntos de estado de desempenho. Para obter mais informações sobre conjuntos de estado de desempenho discretos e baseados em intervalo, consulte PO_FX_PERF_STATE_TYPE.

Se Flags = PO_FX_FLAG_BLOCKING, a chamada PoFxIssueComponentPerfStateChange será síncrona. Nesse caso, PoFxIssueComponentPerfStateChange aguarda o retorno até que o componente conclua a transição de estado de desempenho. A rotina ComponentPerfStateCallback do driver é chamada para informar ao driver que a alteração do estado de desempenho do componente está concluída. Esse retorno de chamada ocorre no mesmo thread que a chamada para PoFxIssueComponentPerfStateChange e PoFxIssueComponentPerfStateChange retorna somente após o retorno de chamada ComponentPerfStateCallback retornar.

Se Flags = PO_FX_FLAG_ASYNC_ONLY, a chamada PoFxIssueComponentPerfStateChange será assíncrona. Nesse caso, PoFxIssueComponentPerfStateChange agenda a rotina ComponentPerfStateCallback para ocorrer em outro thread e retorna sem esperar que o retorno de chamada ocorra. O retorno de chamada pode ocorrer antes ou depois que PoFxIssueComponentPerfStateChange retornar. O driver deve contar com a rotina ComponentPerfStateCallback para determinar quando o componente conclui a transição para o novo estado de desempenho.

O driver pode definir Flags = 0 para indicar que não se importa se a chamada PoFxIssueComponentPerfStateChange é síncrona ou assíncrona. Nesse caso, PoFx decide a sincronização da chamada com base em se o PEP usa uma solicitação síncrona ou assíncrona para emitir a alteração do estado de desempenho para o componente.

Se sinalizadores = PO_FX_FLAG_ASYNC_ONLY ou nenhum sinalizador for passado, essa rotina exigirá um IRQL de <= DISPATCH_LEVEL. Se Sinalizadores = PO_FX_FLAG_BLOCKING, essa rotina exigirá um IRQL de <= APC_LEVEL.

Essa função sempre resultará em uma chamada para a rotina ComponentPerfStateCallback , independentemente da sincronização da chamada. Como o PEP pode optar por negar a solicitação para alterar o estado de desempenho, o driver deve aguardar até receber o retorno de chamada antes de confirmar o estado de desempenho no hardware.

Somente uma única chamada da rotina PoFxIssueComponentPerfStateChange é permitida por vez por componente, independentemente de a chamada ser síncrona ou assíncrona. Depois de emitir uma solicitação de alteração de estado de desempenho, o driver deve aguardar até que ComponentPerfStateCallback seja recebido antes de chamar essa rotina novamente, mesmo que a solicitação envolva um conjunto de estado de desempenho diferente. Se essa rotina for chamada novamente antes de aguardar até que ComponentPerfStateCallback seja recebido, ocorrerá uma verificação de bugs.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 10.
Plataforma de Destino Universal
Cabeçalho wdm.h
Biblioteca Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= APC_LEVEL ou <= DISPATCH_LEVEL (seção Consulte Comentários)

Confira também

ComponentPerfStateCallback

Gerenciamento de Estado de Desempenho do Dispositivo

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChangeMultiple

PoFxRegisterComponentPerfStates