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.
[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
Gerenciamento de Estado de Desempenho do Dispositivo