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) |