Función IsBadReadPtr (winbase.h)
Comprueba que el proceso de llamada tiene acceso de lectura al intervalo de memoria especificado.
Sintaxis
BOOL IsBadReadPtr(
[in] const VOID *lp,
[in] UINT_PTR ucb
);
Parámetros
[in] lp
Puntero al primer byte del bloque de memoria.
[in] ucb
Tamaño del bloque de memoria, en bytes. Si este parámetro es cero, el valor devuelto es cero.
Valor devuelto
Si el proceso de llamada tiene acceso de lectura a todos los bytes del intervalo de memoria especificado, el valor devuelto es cero.
Si el proceso de llamada no tiene acceso de lectura a todos los bytes del intervalo de memoria especificado, el valor devuelto es distinto de cero.
Si la aplicación se compila como una versión de depuración y el proceso no tiene acceso de lectura a todos los bytes del intervalo de memoria especificado, la función produce una aserción y se divide en el depurador. Dejando el depurador, la función continúa como de costumbre y devuelve un valor distinto de cero. Este comportamiento es por diseño, como ayuda de depuración.
Comentarios
Esta función se usa normalmente cuando se trabaja con punteros devueltos desde bibliotecas de terceros, donde no se puede determinar el comportamiento de administración de memoria en el archivo DLL de terceros.
Se espera que los subprocesos de un proceso colaboren de tal manera que uno no libere memoria que el otro necesite. El uso de esta función no niega la necesidad de hacerlo. Si esto no se hace, la aplicación puede producir un error de forma impredecible.
La desreferenciación de punteros potencialmente no válidos puede deshabilitar la expansión de la pila en otros subprocesos. Un subproceso que agota su pila, cuando se ha deshabilitado la expansión de la pila, da como resultado la finalización inmediata del proceso primario, sin ninguna ventana de error emergente ni información de diagnóstico.
Si el proceso de llamada tiene acceso de lectura a algunos, pero no todos, de los bytes del intervalo de memoria especificado, el valor devuelto es distinto de cero.
En un entorno de multitarea preferente, es posible que algún otro subproceso cambie el acceso del proceso a la memoria que se está probando. Incluso cuando la función indica que el proceso tiene acceso de lectura a la memoria especificada, debe usar el control de excepciones estructurado al intentar acceder a la memoria. El uso del control de excepciones estructurado permite al sistema notificar al proceso si se produce una excepción de infracción de acceso, lo que proporciona al proceso la oportunidad de controlar la excepción.
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winbase.h (incluya Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |