Share via


Fonction IsBadWritePtr (winbase.h)

Vérifie que le processus appelant dispose d’un accès en écriture à la plage de mémoire spécifiée.

Important Cette fonction est obsolète et ne doit pas être utilisée. Malgré son nom, cela ne garantit pas que le pointeur est valide ou que la mémoire pointée est sûre à utiliser. Pour plus d’informations, consultez Remarques sur cette page.
 

Syntaxe

BOOL IsBadWritePtr(
  [in] LPVOID   lp,
  [in] UINT_PTR ucb
);

Paramètres

[in] lp

Pointeur vers le premier octet du bloc de mémoire.

[in] ucb

Taille du bloc de mémoire, en octets. Si ce paramètre est égal à zéro, la valeur de retour est égale à zéro.

Valeur retournée

Si le processus appelant a un accès en écriture à tous les octets de la plage de mémoire spécifiée, la valeur de retour est zéro.

Si le processus appelant n’a pas accès en écriture à tous les octets de la plage de mémoire spécifiée, la valeur de retour est différente de zéro.

Si l’application est exécutée sous un débogueur et que le processus n’a pas accès en écriture à tous les octets de la plage de mémoire spécifiée, la fonction génère une première chance STATUS_ACCESS_VIOLATION exception. Le débogueur peut être configuré pour s’arrêter pour cette condition. Après avoir repris l’exécution du processus dans le débogueur, la fonction continue comme d’habitude et retourne une valeur différente de zéro Ce comportement est conçu et sert d’aide au débogage.

Remarques

Cette fonction est généralement utilisée lors de l’utilisation de pointeurs retournés par des bibliothèques tierces, où vous ne pouvez pas déterminer le comportement de gestion de la mémoire dans la DLL tierce.

Les threads d’un processus sont censés coopérer de telle sorte que l’un d’eux ne libère pas la mémoire dont l’autre a besoin. L’utilisation de cette fonction n’annule pas la nécessité de le faire. Si ce n’est pas le cas, l’application peut échouer de manière imprévisible.

Le déréférencement des pointeurs potentiellement non valides peut désactiver l’expansion de la pile dans d’autres threads. Un thread qui épuise sa pile, lorsque l’extension de la pile a été désactivée, entraîne l’arrêt immédiat du processus parent, sans fenêtre d’erreur contextuelle ni informations de diagnostic.

Si le processus appelant a un accès en écriture à certains octets de la plage de mémoire spécifiée, mais pas à tous, la valeur de retour est différente de zéro.

Dans un environnement multitâche préemptif, il est possible pour un autre thread de modifier l’accès du processus à la mémoire testée. Même si la fonction indique que le processus dispose d’un accès en écriture à la mémoire spécifiée, vous devez utiliser la gestion structurée des exceptions lors de la tentative d’accès à la mémoire. L’utilisation de la gestion structurée des exceptions permet au système d’informer le processus si une exception de violation d’accès se produit, ce qui donne au processus la possibilité de gérer l’exception.

IsBadWritePtr n’est pas multithread safe. Pour l’utiliser correctement sur un pointeur partagé par plusieurs threads, appelez-le à l’intérieur d’une région de code critique qui permet à un seul thread d’accéder à la mémoire en cours de vérification. Utilisez des objets au niveau du système d’exploitation tels que des sections critiques ou des mutex ou les fonctions verrouillées pour créer la région critique du code.

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbase.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

IsBadCodePtr

IsBadReadPtr

IsBadStringPtr