Función IsBadWritePtr (winbase.h)
Comprueba que el proceso de llamada tiene acceso de escritura al intervalo de memoria especificado.
Sintaxis
BOOL IsBadWritePtr(
[in] LPVOID 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 escritura a todos los bytes del intervalo de memoria especificado, el valor devuelto es cero.
Si el proceso de llamada no tiene acceso de escritura a todos los bytes del intervalo de memoria especificado, el valor devuelto es distinto de cero.
Si la aplicación se ejecuta en un depurador y el proceso no tiene acceso de escritura a todos los bytes del intervalo de memoria especificado, la función produce una primera oportunidad STATUS_ACCESS_VIOLATION excepción. El depurador se puede configurar para interrumpir esta condición. Después de reanudar la ejecución del proceso en el depurador, la función continúa como de costumbre y devuelve un valor distinto de cero Este comportamiento es por diseño y actúa 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 escritura 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 escritura 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.
IsBadWritePtr no es seguro multiproceso. Para usarlo correctamente en un puntero compartido por varios subprocesos, llámalo dentro de una región crítica de código que permite que solo un subproceso acceda a la memoria que se está comprobando. Use objetos de nivel de sistema operativo, como secciones críticas o exclusión mutua, o las funciones interbloqueadas para crear la región crítica del código.
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 |