Funzione WmiSystemControl (wmilib.h)
La routine WmiSystemControl è una routine dispatch per i driver che usano libreria WMI supportano routine per gestire i runtime di integrazione 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 di WMILIB_CONTEXT che contiene informazioni di registrazione per i blocchi di dati e i blocchi eventi di un driver e definisce i punti di ingresso per le routine di callback della libreria WMI del driver.
[in] DeviceObject
Puntatore al DEVICE_OBJECTdel driver.
[in, out] Irp
Puntatore al 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 ed eventualmente completato. Se la routine DpWmi Xxx del driverchiamata da WmiSystemControl non ha completato l'IRP, il driver deve chiamare WmiCompleteRequest per completare l'IRP dopo WmiSystemControl.
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 questo 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 all'oggetto dispositivo in Parameters.WMI.ProviderId in 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:
Osservazioni
Quando un driver riceve una richiesta di IRP_MJ_SYSTEM_CONTROL con un 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 IRP è una richiesta WMI e determina se il blocco specificato dalla richiesta è valido per il driver. In tal caso, elabora l'IRP chiamando il DpWmi appropriatoxxx punto di ingresso nella struttura di WMILIB_CONTEXT del driver. WMI viene eseguito in IRQL PASSIVE_LEVEL quando chiama la routine DpWmi Xxx 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.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile in Windows 2000 e versioni successive di Windows. |
piattaforma di destinazione | Universale |
intestazione | wmilib.h (include Wmilib.h) |
libreria | Wmilib.lib |
IRQL | PASSIVE_LEVEL (vedere la sezione Osservazioni) |
regole di conformità DDI | wmiComplete(wdm) |