WMI_EXECUTE_METHOD_CALLBACK fonction de rappel (wmilib.h)
La routine DpWmiExecuteMethod exécute une méthode associée à un bloc de données. Cette routine est facultative.
Syntaxe
WMI_EXECUTE_METHOD_CALLBACK WmiExecuteMethodCallback;
NTSTATUS WmiExecuteMethodCallback(
[in] PDEVICE_OBJECT DeviceObject,
[in] PIRP Irp,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG MethodId,
[in] ULONG InBufferSize,
[in] ULONG OutBufferSize,
[in, out] PUCHAR Buffer
)
{...}
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] InstanceIndex
Si le bloc spécifié par GuidIndex a plusieurs instances, InstanceIndex spécifie une valeur d’index de base zéro qui identifie l’instance.
[in] MethodId
Spécifie l’ID de la méthode à exécuter. Le pilote définit l’ID de méthode en tant qu’élément dans un bloc de données.
[in] InBufferSize
Indique la taille en octets des données d’entrée. S’il n’existe aucune donnée d’entrée, InBufferSize est égal à zéro.
[in] OutBufferSize
Indique le nombre d’octets disponibles dans la mémoire tampon pour les données de sortie.
[in, out] Buffer
Pointeur vers une mémoire tampon qui contient les données d’entrée, le cas échéant, et reçoit les données de sortie, le cas échéant, pour la méthode. Si la mémoire tampon est trop petite pour recevoir toutes les données de sortie, le pilote retourne STATUS_BUFFER_TOO_SMALL et appelle WmiCompleteRequest avec la taille requise.
Valeur de retour
DpWmiExecuteMethod retourne STATUS_SUCCESS ou un code d’erreur approprié, par exemple :
Remarques
WMI appelle la routine DpWmiExecuteMethod d’un pilote après l’appel de WmiSystemControl en réponse à une demande de IRP_MN_EXECUTE_METHOD.
Si un pilote implémente une routine DpWmiExecuteMethod, le pilote doit placer l’adresse de la routine dans le ExecuteWmiMethod membre de la structure de WMILIB_CONTEXT qu’il transmet à WmiSystemControl. Si un pilote n’implémente pas de routine DpWmiExecuteMethod, il doit définir ExecuteWmiMethod sur NULL. Dans ce dernier cas, WMI retourne STATUS_INVALID_DEVICE_REQUEST à l’appelant en réponse à n’importe quelle demande de IRP_MN_EXECUTE_METHOD.
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.
- Vérifiez que la valeur InstanceIndex se trouve dans la plage d’index d’instance pris en charge par le pilote pour le bloc de données.
- Vérifiez que l’identificateur de méthode fourni par MethodId est un identificateur valide pour le bloc de données spécifié et que l’appelant est autorisé à exécuter la méthode.
- Vérifiez que tampon et InBufferSize décrire une mémoire tampon suffisamment grande pour contenir les paramètres d’entrée de la méthode spécifiée, y compris le remplissage si nécessaire, et vérifier que les paramètres d’entrée sont valides.
- Vérifiez que tampon et OutBufferSize décrivent une mémoire tampon suffisamment grande pour recevoir les données de sortie de la méthode spécifiée, y compris le remplissage si nécessaire.
Si la méthode spécifiée effectue une opération qui provoque une perte de données, telle que l’extraction et la réinitialisation du contenu d’un ensemble de compteurs, le pilote doit valider la taille de la mémoire tampon de sortie avant d’effectuer l’opération. De cette façon, le pilote peut retourner STATUS_BUFFER_TOO_SMALL et autoriser l’appelant à renvoyer la requête avec une mémoire tampon plus grande, sans réinitialiser prématurément les compteurs.
Après avoir exécuté la méthode et écrit toutes les données de sortie dans la mémoire tampon, 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. |