Funzione WmiSystemControl (wmilib.h)

La routine WmiSystemControl è una routine di invio per i driver che usano le routine di libreria WMI supportano le routine per gestire gli INDIRIZZI IR WMI.

Sintassi

NTSTATUS WmiSystemControl(
  [in]      PWMILIB_CONTEXT         WmiLibInfo,
  [in]      PDEVICE_OBJECT          DeviceObject,
  [in, out] PIRP                    Irp,
  [out]     PSYSCTL_IRP_DISPOSITION IrpDisposition
);

Parametri

[in] WmiLibInfo

Puntatore a una struttura WMILIB_CONTEXT che contiene informazioni di registrazione per blocchi di dati e blocchi eventi di un driver e definisce i punti di ingresso per le routine di callback della libreria WMI del driver.

[in] DeviceObject

Puntatore alla DEVICE_OBJECT del conducente.

[in, out] Irp

Puntatore all'IRP.

[out] IrpDisposition

Puntatore a un valore di enumerazione di tipo SYSCTL_IRP_DISPOSITION che indica come è stato gestito l'IRP. WmiSystemControl imposta sempre questo valore, anche quando restituisce un codice NTSTATUS non riuscito.

SYSCTL_IRP_DISPOSITION è un'enumerazione in Wmilib.h e contiene i valori seguenti:

IrpProcessed

L'IRP è stato elaborato e probabilmente completato. Se la routine DpWmiXxx del driver chiamata da WmiSystemControl non ha completato l'IRP, il driver deve chiamare WmiCompleteRequest per completare l'IRP dopo che WmiSystemControl restituisce.

IrpNotCompleted

L'IRP è stato elaborato ma non completato, perché WMI ha rilevato un errore e configurato l'IRP con un codice di errore appropriato oppure ha elaborato una richiesta di IRP_MN_REGINFO o IRP_MN_REGINFO_EX . Il driver deve completare l'IRP chiamando IoCompleteRequest.

IrpNotWmi

L'IRP non è una richiesta WMI, ovvero WMI, non riconosce il codice secondario di IRP. Se il driver gestisce le richieste di IRP_MJ_SYSTEM_CONTROL con questa IRP_MN_XXX, deve gestire l'IRP; in caso contrario, il driver deve inoltrare l'IRP al driver inferiore successivo. Se il driver è il driver di livello più basso, deve completare l'IRP.

IrpForward

L'IRP è destinato a un altro oggetto dispositivo, ovvero il puntatore dell'oggetto dispositivo in Parameters.WMI.ProviderId nell'IRP non corrisponde al puntatore passato dal driver nella chiamata a IoWMIRegistrationControl. Il driver deve inoltrare l'IRP al driver inferiore successivo. Se il driver è il driver di livello più basso, deve completare l'IRP.

Valore restituito

WmiSystemControl restituisce STATUS_SUCCESS o uno dei codici di errore seguenti:

Commenti

Quando un driver riceve una richiesta di IRP_MJ_SYSTEM_CONTROL con codice secondario WMI IRP, chiama WmiSystemControl con un puntatore alla struttura WMILIB_CONTEXT del driver, un puntatore all'oggetto dispositivo e un puntatore all'IRP. La struttura WMILIB_CONTEXT contiene informazioni di registrazione per i blocchi di dati e i blocchi eventi del driver e definisce i punti di ingresso per le routine di callback della libreria WMI.

WmiSystemControl conferma che l'IRP è una richiesta WMI e determina se il blocco specificato dalla richiesta è valido per il driver. In tal caso, elabora l'IRP chiamando il punto di ingresso DpWmiXxx appropriato nella struttura di WMILIB_CONTEXT del driver. WMI è in esecuzione in IRQL PASSIVE_LEVEL quando chiama la routine DpWmiXxx del driver.

Un driver deve essere in esecuzione in IRQL PASSIVE_LEVEL quando inoltra una richiesta di IRP_MJ_SYSTEM_CONTROL al driver inferiore successivo.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows 2000 e versioni successive di Windows.
Piattaforma di destinazione Universale
Intestazione wmilib.h (includere Wmilib.h)
Libreria Wmilib.lib
IRQL PASSIVE_LEVEL (vedere la sezione Osservazioni)
Regole di conformità DDI WmiComplete(wdm)

Vedi anche

DpWmiExecuteMethod

DpWmiFunctionControl

DpWmiQueryDataBlock

DpWmiQueryReginfo

DpWmiSetDataBlock

DpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT