Condividi tramite


Funzione PoFxIssueComponentPerfStateChangeMultiple (wdm.h)

La routine PoFxIssueComponentPerfStateChangeMultiple invia una richiesta per modificare gli stati delle prestazioni in più set di stati delle prestazioni contemporaneamente per un componente del dispositivo.

Sintassi

void PoFxIssueComponentPerfStateChangeMultiple(
  [in] POHANDLE                   Handle,
  [in] ULONG                      Flags,
  [in] ULONG                      Component,
  [in] ULONG                      PerfChangesCount,
  [in] PO_FX_PERF_STATE_CHANGE [] PerfChanges,
  [in] PVOID                      Context
);

Parametri

[in] Handle

Handle che rappresenta la registrazione del dispositivo con PoFx. Il driver di dispositivo ha ricevuto in precedenza questo handle dalla routine PoFxRegisterDevice .

[in] Flags

Flag che modificano il comportamento dell'operazione di modifica dello stato delle prestazioni. Impostare questo membro su zero o su uno dei flag seguenti PO_FX_FLAG_XXX bit:

Questi due bit di flag si escludono a vicenda. Per altre informazioni, vedere la sezione Osservazioni.

Valore Significato
PO_FX_FLAG_BLOCKING
0x1
Apportare la modifica sincrona della condizione. Se questo flag è impostato, la routine che richiede la modifica della condizione non restituisce il controllo al driver chiamante finché l'hardware del componente non completa la transizione alla nuova condizione. Questo flag può essere usato solo se il chiamante è in esecuzione in IRQL < DISPATCH_LEVEL.
PO_FX_FLAG_ASYNC_ONLY
0x2
Apportare la modifica della condizione completamente asincrona. Se questo flag è impostato, la routine di callback del driver chiamante viene chiamata da un thread diverso dal thread in cui viene chiamata la routine che richiede la modifica della condizione. Pertanto, la routine che richiede la modifica della condizione restituisce sempre in modo asincrono senza attendere il completamento del callback.

[in] Component

Indice che identifica il componente. Questo parametro è un indice nella matrice Components nella struttura PO_FX_DEVICE usata dal driver di dispositivo per registrare il dispositivo con PoFx. Se la matrice Components contiene N elementi, gli indici dei componenti sono compresi tra 0 e N-1.

[in] PerfChangesCount

Numero di richieste di modifica dello stato delle prestazioni contenute nella matrice PerfChanges .

[in] PerfChanges

Primo elemento in una matrice di strutture PO_FX_PERF_STATE_CHANGE che rappresentano gli stati delle prestazioni a cui il driver intende eseguire la transizione. Ogni elemento della matrice rappresenta una singola richiesta di modifica dello stato delle prestazioni.

[in] Context

Puntatore al contesto per la routine di callback ComponentPerfStateCallback . Questo parametro è facoltativo e, Viene fornito in modo che un driver o un contesto di dispositivo possa essere passato alla routine di callback. Se questo parametro non viene usato, deve essere impostato su NULL.

Valore restituito

nessuno

Osservazioni

Un driver chiama PoFxIssueComponentPerfStateChangeMultiple, il framework di risparmio energia (PoFx) richiederà al plug-in di estensione della piattaforma (PEP) di posizionare i set di stati di prestazioni del componente negli stati delle prestazioni specificati. Questa routine può essere utilizzata con tipi discreti e basati su intervalli di set di stati delle prestazioni. Per altre informazioni sui set di stati di prestazioni discreti e basati su intervalli, vedere PO_FX_PERF_STATE_TYPE.

Se Flags = PO_FX_FLAG_BLOCKING, la chiamata PoFxIssueComponentPerfStateChangeMultiple è sincrona. In questo caso , PoFxIssueComponentPerfStateChangeMultiple attende di restituire finché il componente non completa la transizione dello stato delle prestazioni. La routine ComponentPerfStateCallback del driver viene chiamata per informare il driver che la modifica dello stato delle prestazioni del componente è stata completata. Questo callback si verifica nello stesso thread della chiamata a PoFxIssueComponentPerfStateChangeMultiple e PoFxIssueComponentPerfStateChangeMultiple restituisce solo dopo la restituzione del callback ComponentPerfStateCallback .

Se Flags = PO_FX_FLAG_ASYNC_ONLY, la chiamata PoFxIssueComponentPerfStateChangeMultiple è asincrona. In questo caso, PoFxIssueComponentPerfStateChangeMultiple pianifica la routine ComponentPerfStateCallback in un altro thread e quindi restituisce senza attendere che si verifichi il callback. Il callback può verificarsi prima o dopo la restituzione di PoFxIssueComponentPerfStateChangeMultiple . Il driver deve basarsi sulla routine ComponentPerfStateCallback per determinare quando il componente completa la transizione al nuovo stato delle prestazioni.

Il driver può impostare Flags = 0 per indicare che non importa se la chiamata PoFxIssueComponentPerfStateChangeMultiple è sincrona o asincrona. In questo caso, PoFx decide la sincronia della chiamata in base al fatto che pep usi una richiesta sincrona o asincrona per emettere la modifica dello stato delle prestazioni al componente.

Se vengono = passati flagPO_FX_FLAG_ASYNC_ONLY o nessun flag, questa routine richiede un IRQL di <= DISPATCH_LEVEL. Se Flags = PO_FX_FLAG_BLOCKING, questa routine richiede un IRQL di <= APC_LEVEL.

Questa funzione genererà sempre una chiamata alla routine ComponentPerfStateCallback indipendentemente dalla sincronizzazione della chiamata. Poiché il PEP può scegliere di negare la richiesta di modifica degli stati delle prestazioni, il driver deve attendere fino a ricevere il callback prima di eseguire il commit degli stati delle prestazioni nell'hardware.

È consentita solo una singola chiamata della routine PoFxIssueComponentPerfStateChangeMultiple alla volta per ogni componente, indipendentemente dal fatto che la chiamata sia sincrona o asincrona. Dopo aver emesso una richiesta di modifica dello stato delle prestazioni, il driver deve attendere fino a quando componentPerfStateCallback viene ricevuto prima di chiamare di nuovo questa routine, anche se la richiesta prevede un diverso set di stati di prestazioni. Se questa routine viene chiamata di nuovo prima di attendere la ricezione di ComponentPerfStateCallback , si verificherà un controllo di bug.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 10.
Piattaforma di destinazione Universale
Intestazione wdm.h
Libreria Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= APC_LEVEL o <= DISPATCH_LEVEL (vedere la sezione Osservazioni)

Vedi anche

ComponentPerfStateCallback

Gestione dello stato delle prestazioni del dispositivo

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChange

PoFxRegisterComponentPerfStates