fonction de rappel WMI_FUNCTION_CONTROL_CALLBACK (wmilib.h)
La routine DpWmiFunctionControl active ou désactive la notification des événements, et active ou désactive la collecte de données pour les blocs de données enregistrés par le pilote comme coûteux à collecter. Cette routine est facultative.
Syntaxe
WMI_FUNCTION_CONTROL_CALLBACK WmiFunctionControlCallback;
NTSTATUS WmiFunctionControlCallback(
[in] PDEVICE_OBJECT DeviceObject,
[in] PIRP Irp,
[in] ULONG GuidIndex,
[in] WMIENABLEDISABLECONTROL Function,
[in] BOOLEAN Enable
)
{...}
Paramètres
[in] DeviceObject
Pointeur vers la structure de DEVICE_OBJECT WDM du pilote.
[in] Irp
Pointeur vers l’IRP.
[in] GuidIndex
Spécifie le bloc de données en fournissant un index de base zéro dans la liste des GUID fournis par le pilote fourni dans la structure WMILIB_CONTEXT passée à WmiSystemControl.
[in] Function
Spécifie ce qu’il faut activer ou désactiver. WmiEventControl indique un événement et WmiDataBlockControl indique la collecte de données d’un bloc inscrit comme coûteux à collecter (autrement dit, un bloc pour lequel le pilote a défini WMIREG_FLAG_EXPENSIVE dans Indicateurs de la structure WMIGUIDREGINFO utilisée pour inscrire le bloc).
[in] Enable
Spécifie TRUE pour activer l’événement ou la collecte de données, ou FAUX pour le désactiver.
Valeur de retour
DpWmiFunctionControl retourne STATUS_SUCCESS ou un état d’erreur approprié, par exemple :
Remarques
WMI appelle la routine DpWmiFunctionControl d’un pilote après que le pilote appelle WmiSystemControl en réponse à l’une des requêtes suivantes :
Si un pilote implémente une routine DpWmiFunctionControl, le pilote doit placer l’adresse de la routine dans le membre WmiFunctionControl de la structure WMILIB_CONTEXT qu’elle transmet à WmiSystemControl. Si un pilote n’implémente pas de routine DpWmiFunctionControl, il doit définir WmiFunctionControl sur NULL. Dans ce dernier cas, WMI retourne STATUS_SUCCESS à l’appelant.
Le pilote est chargé de valider tous les arguments d’entrée. Plus précisément, le pilote doit effectuer les opérations suivantes :
- Vérifiez que la valeur GuidIndex est comprise entre zéro et GuidCount-1, en fonction du membre GuidCount de la structure WMILIB_CONTEXT.
- Vérifiez que le pilote n’a pas marqué le bloc de données spécifié pour la suppression. Si le pilote a récemment spécifié l’indicateur de WMIREG_FLAG_REMOVE_GUID dans un WMIGUIDREGINFO structure contenue dans une structure WMILIB_CONTEXT, il est possible qu’une demande supplémentaire arrive avant la suppression.
Après avoir activé ou désactivé l’événement ou la collecte de données pour le bloc, le pilote appelle WmiCompleteRequest pour terminer la requête.
Cette routine peut être paginable.
Pour plus d’informations sur l’implémentation de cette routine, consultez Appel de WmiSystemControl pour gérer les runtimes d’intégration WMI.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Bureau |
d’en-tête | wmilib.h (include Wmilib.h) |
IRQL | Appelé à PASSIVE_LEVEL. |