Partager via


MM_BAD_POINTER

Notes

Cette page contenait auparavant une liste de macros de noyau, pas seulement MM_BAD_POINTER. Ces macros ont maintenant été divisées en leurs propres pages individuelles. Pour obtenir des liens, utilisez la section Voir aussi ci-dessous ou effectuez une recherche sur le web.

Défini dans : Wdm.h

Votre pilote peut utiliser la macro MM_BAD_POINTER comme valeur de pointeur incorrecte à affecter à une variable de pointeur non initialisée ou non valide. Une tentative d’accès à l’emplacement de mémoire pointé par cette variable de pointeur non valide entraîne un bogue case activée.

Sur de nombreuses plateformes matérielles, l’adresse 0 (souvent représentée sous la forme d’une constante NULL nommée) est une adresse non valide, mais les développeurs de pilotes ne doivent pas supposer que l’adresse 0 est universellement non valide sur toutes les plateformes. La définition de variables de pointeur non initialisées ou non valides pour traiter 0 peut ne pas toujours garantir que des accès inappropriés via ces pointeurs seront détectés.

En revanche, la valeur MM_BAD_POINTER est garantie comme une adresse non valide sur chaque plateforme sur laquelle un pilote s’exécute.

Sur les plateformes sur lesquelles l’adresse 0 est une adresse non valide, un pilote qui accède à l’adresse 0 à l’IRQL < DISPATCH_LEVEL provoque une exception (violation d’accès) qui peut être interceptée par inadvertance par une try/except instruction. Ainsi, le code de gestion des exceptions du pilote peut masquer l’accès non valide et l’empêcher d’être détecté pendant le débogage. Toutefois, un accès à l’adresse MM_BAD_POINTER est garanti pour provoquer un bogue case activée, qui ne peut pas être masqué par un gestionnaire d’exceptions.

L’exemple de code suivant montre comment affecter la valeur MM_BAD_POINTER à une variable de pointeur nommée ptr. Le fichier d’en-tête Ntdef.h définit le type PUCHAR comme pointeur vers un unsigned char.

PUCHAR ptr = (PUCHAR)MM_BAD_POINTER; // Now _ptr is guaranteed to fault._

Une fois ptr que est défini sur MM_BAD_POINTER, une tentative d’accès à l’emplacement de mémoire pointé par ptr entraîne un bogue case activée.

En fait, MM_BAD_POINTER est l’adresse de base d’une page entière d’adresses non valides. Par conséquent, tout accès d’une adresse dans la plage MM_BAD_POINTER à (MM_BAD_POINTER + PAGE_SIZE - 1) entraîne un bogue case activée.

À compter de Windows 8.1, la macro MM_BAD_POINTER est définie dans le fichier d’en-tête Wdm.h. Toutefois, le code de pilote qui utilise cette définition de macro peut s’exécuter dans les versions précédentes de Windows, à partir de Windows Vista.

À compter de Windows Vista, la variable globale MmBadPointer est disponible en tant que pointeur vers une valeur de pointeur qui est garantie comme une adresse non valide. Toutefois, à compter de Windows 8.1, l’utilisation de MmBadPointer est déconseillée et vous devez mettre à jour vos pilotes pour utiliser la macro MM_BAD_POINTER à la place.

Disponible à partir de Windows 8.1. Compatible avec les versions précédentes de Windows à partir de Windows Vista.

Voir aussi