Compartilhar via


Função PoFxIssueComponentPerfStateChangeMultiple (wdm.h)

A rotina PoFxIssueComponentPerfStateChangeMultiple envia uma solicitação para alterar os estados de desempenho em vários conjuntos de estado de desempenho simultaneamente para um componente do dispositivo.

Sintaxe

void PoFxIssueComponentPerfStateChangeMultiple(
  [in] POHANDLE                   Handle,
  [in] ULONG                      Flags,
  [in] ULONG                      Component,
  [in] ULONG                      PerfChangesCount,
  [in] PO_FX_PERF_STATE_CHANGE [] PerfChanges,
  [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] PerfChangesCount

O número de solicitações de alteração de estado de desempenho contidas na matriz PerfChanges .

[in] PerfChanges

O primeiro elemento em uma matriz de estruturas PO_FX_PERF_STATE_CHANGE que representam o desempenho afirma que o driver pretende fazer a transição. Cada elemento de matriz representa uma única solicitação de alteração de estado de desempenho.

[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

Um driver chama PoFxIssueComponentPerfStateChangeMultiple, a PoFx (estrutura de gerenciamento de energia) solicitará que o PEP (plug-in de extensão de plataforma) coloque os conjuntos de estado de desempenho do componente nos estados de desempenho especificados. 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 PoFxIssueComponentPerfStateChangeMultiple será síncrona. Nesse caso, PoFxIssueComponentPerfStateChangeMultiple aguarda o retorno até que o componente conclua a transição do 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 PoFxIssueComponentPerfStateChangeMultiple e PoFxIssueComponentPerfStateChangeMultiple retorna somente após o retorno de chamada ComponentPerfStateCallback .

Se Flags = PO_FX_FLAG_ASYNC_ONLY, a chamada PoFxIssueComponentPerfStateChangeMultiple será assíncrona. Nesse caso, PoFxIssueComponentPerfStateChangeMultiple 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 PoFxIssueComponentPerfStateChangeMultiple 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 PoFxIssueComponentPerfStateChangeMultiple é 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 os estados de desempenho, o driver deve aguardar até receber o retorno de chamada antes de confirmar os estados de desempenho no hardware.

Somente uma única chamada da rotina PoFxIssueComponentPerfStateChangeMultiple é permitida em um momento 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

PoFxIssueComponentPerfStateChange

PoFxRegisterComponentPerfStates