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
- ADDRESS_AND_SIZE_TO_SPAN_PAGES
- BYTE_OFFSET
- BYTES_TO_PAGES
- CONTAINING_RECORD
- IoSkipCurrentIrpStackLocation
- KeInitializeCallbackRecord
- MmGetMdlByteCount
- MmGetMdlByteOffset
- MmGetMdlPfnArray
- MmGetMdlVirtualAddress
- MmGetSystemAddressForMdlSafe
- MmInitializeMdl
- MmPrepareMdlForReuse
- PAGE_ALIGN
- PAGED_CODE
- PAGED_CODE_LOCKED
- PoSetDeviceBusy
- PsGetCurrentProcess
- READ_REGISTER_BUFFER_ULONG64
- READ_REGISTER_ULONG64
- ROUND_TO_PAGES
- RtlEqualLuid
- RtlInitEmptyAnsiString
- RtlInitEmptyUnicodeString
- RtlIsZeroLuid
- RtlRetrieveUlong
- RtlRetrieveUshort
- RtlStoreUlong
- RtlStoreUlonglong
- RtlStoreUlongPtr
- RtlStoreUshort
- WRITE_REGISTER_BUFFER_ULONG64
- WRITE_REGISTER_ULONG64
- ZwCurrentProcess
- ZwCurrentThread
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour