Fonction DbgPrintEx (wdm.h)
La routine DbgPrintEx envoie une chaîne au débogueur de noyau si les conditions que vous spécifiez sont remplies.
Syntaxe
NTSYSAPI ULONG DbgPrintEx(
[in] ULONG ComponentId,
[in] ULONG Level,
[in] PCSTR Format,
...
);
Paramètres
[in] ComponentId
Spécifie le composant appelant cette routine. Il doit s’agir de l’un des ID de filtre de nom de composant définis dans le fichier d’en-tête Dpfilter.h. Pour éviter de mélanger la sortie de votre pilote avec la sortie des composants Windows, vous devez utiliser uniquement les valeurs suivantes pour ComponentId :
- DPFLTR_IHVVIDEO_ID
- DPFLTR_IHVAUDIO_ID
- DPFLTR_IHVNETWORK_ID
- DPFLTR_IHVSTREAMING_ID
- DPFLTR_IHVBUS_ID
- DPFLTR_IHVDRIVER_ID
[in] Level
Spécifie la gravité du message envoyé. Il peut s’agir de n’importe quel entier 32 bits. Les valeurs comprises entre 0 et 31 (inclus) sont traitées différemment des valeurs comprises entre 32 et 0xFFFFFFFF. Pour plus d’informations, consultez Lecture et filtrage des messages de débogage.
[in] Format
Spécifie un pointeur vers la chaîne de format à imprimer. La chaîne Format prend en charge la plupart des champs de spécification de formatde style printf. Toutefois, les codes de format Unicode (%C, %S, %lc, %ls, %wc, %ws et %wZ) ne peuvent être utilisés qu’avec IRQL = PASSIVE_LEVEL. La routine DbgPrintEx ne prend pas en charge les types à virgule flottante (%f, %e, %E, %g, %G, %a ou %A).
...
Spécifie les arguments de la chaîne de format, comme dans printf.
Valeur retournée
En cas de réussite, DbgPrintEx retourne le code NTSTATUS STATUS_SUCCESS ; sinon, il retourne le code d’erreur approprié.
Remarques
Seuls les pilotes en mode noyau peuvent appeler la routine DbgPrintEx .
DbgPrint et DbgPrintEx peuvent être appelés à l’adresse IRQL<=DIRQL. Toutefois, les codes au format Unicode (%wc et %ws) ne peuvent être utilisés que dans IRQL = PASSIVE_LEVEL. En outre, étant donné que le débogueur utilise des interruptions interprocessus (IPIs) pour communiquer avec d’autres processeurs, l’appel de DbgPrint à IRQL>DIRQL peut provoquer des blocages.
DbgPrintEx transmet la chaîne spécifiée au débogueur du noyau ou ne fait rien du tout, en fonction des valeurs de ComponentId, Level et des masques de filtre de composant correspondants. Pour plus d’informations, consultez Lecture et filtrage des messages de débogage.
Sauf si cela est absolument nécessaire, vous ne devez pas obtenir de chaîne à partir d’une entrée utilisateur ou d’un autre processus et la transmettre à DbgPrintEx. Si vous utilisez une chaîne que vous n’avez pas créée, vous devez vérifier qu’il s’agit d’une chaîne de format valide et que les codes de format correspondent à la liste d’arguments en type et en quantité. La meilleure pratique de codage consiste à ce que toutes les chaînes de format soient statiques et définies au moment de la compilation.
Il n’existe aucune limite supérieure à la taille de la chaîne Format ou au nombre d’arguments. Toutefois, tout appel unique à DbgPrintEx ne transmet que 512 octets d’informations. Il existe également une limite à la taille de la mémoire tampon DbgPrint. Pour plus d’informations, consultez La mémoire tampon DbgPrint et le débogueur .
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Microsoft Windows XP et versions ultérieures. |
Plateforme cible | Universal |
En-tête | wdm.h (inclure Wdm.h) |
Bibliothèque | NtDll.lib (mode utilisateur) ; NtosKrnl.lib (mode noyau) |
DLL | NtDll.dll (mode utilisateur) ; NtosKrnl.exe (mode noyau) |
IRQL | <= DIRQL (voir la section Commentaires) |