The Win32 API provides a set of functions that a process can use to verify whether it has a specified type of access to a given memory address or range of addresses. The following access validation functions are available.
Function | Description |
---|---|
IsBadCodePtr | Determines whether the calling process has read access to the memory at the specified address. |
IsBadReadPtr | Determines whether the calling process has read access to the memory at a specified range of addresses. |
IsBadStringPtr | Determines whether the calling process has read access to the memory pointed to by a null-terminated string pointer. The function validates access for a specified number of characters or until it encounters the string's terminating null character. |
IsBadWritePtr | Determines whether the calling process has write access to the memory at a specified range of addresses. |
The IsBadHugeReadPtr and IsBadHugeWritePtr functions are also available for compatibility with 16-bit versions of Windows that distinguished between normal memory allocations and huge allocations occupying multiple segments. In 32-bit versions of Windows, these functions are equivalent to IsBadReadPtr and IsBadWritePtr.
In a preemptive multitasking environment, it is possible for some other thread to change the process's access to the memory being tested. Even when an access validation function indicates that the process has the desired access to the specified memory, you should use structured exception handling when attempting to access the memory. Use of structured exception handling enables the system to notify the process if an access violation exception occurs, giving the process an opportunity to handle the exception. For more information, see Structured Exception Handling.