Fonction IsBadReadPtr (winbase.h)
Vérifie que le processus appelant dispose d’un accès en lecture à la plage de mémoire spécifiée.
Syntaxe
BOOL IsBadReadPtr(
[in] const VOID *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 zéro.
Valeur retournée
Si le processus appelant a un accès en lecture à 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 lecture à 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 compilée en tant que version de débogage et que le processus n’a pas d’accès en lecture à tous les octets de la plage de mémoire spécifiée, la fonction provoque une assertion et s’interrompt dans le débogueur. En quittant le débogueur, la fonction continue comme d’habitude et retourne une valeur différente de zéro. Ce comportement est par conception, en tant qu’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 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 de pointeurs potentiellement non valides peut désactiver l’expansion de la pile dans d’autres threads. Un thread qui épuise sa pile, lorsque l’expansion 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 dispose d’un accès en lecture à une partie, mais pas à la totalité, des octets dans la plage de mémoire spécifiée, 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 lorsque la fonction indique que le processus dispose d’un accès en lecture à 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’avertir le processus si une exception de violation d’accès se produit, ce qui donne au processus la possibilité de gérer l’exception.
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 |