IsBadReadPtr 函数 (winbase.h)
验证调用进程是否具有对指定内存范围的读取访问权限。
重要 此函数已过时,不应使用。 尽管其名称为 ,但它不保证指针有效或指向的内存可以安全使用。 有关详细信息,请参阅此页上的备注。
语法
BOOL IsBadReadPtr(
[in] const VOID *lp,
[in] UINT_PTR ucb
);
参数
[in] lp
指向内存块的第一个字节的指针。
[in] ucb
内存块的大小(以字节为单位)。 如果此参数为零,则返回值为零。
返回值
如果调用进程具有对指定内存范围内所有字节的读取访问权限,则返回值为零。
如果调用进程不具有对指定内存范围内所有字节的读取访问权限,则返回值为非零值。
如果应用程序编译为调试版本,并且进程对指定内存范围中的所有字节没有读取访问权限,则函数会导致断言并中断调试器。 离开调试器后,函数会像往常一样继续,并返回非零值。 此行为是设计为调试辅助的。
注解
处理从第三方库返回的指针时,通常使用此函数,其中无法确定第三方 DLL 中的内存管理行为。
进程中的线程应以一种不会释放另一个线程所需的内存的方式进行协作。 使用此函数并不能抵消执行此操作的需要。 如果未执行此操作,应用程序可能会以不可预知的方式失败。
取消引用可能无效的指针可能会禁用其他线程中的堆栈扩展。 如果禁用堆栈扩展,线程耗尽其堆栈,将导致父进程立即终止,并且没有弹出窗口错误窗口或诊断信息。
如果调用进程具有对指定内存范围内某些字节(但不是全部)的读取访问权限,则返回值为非零值。
在抢占式多任务环境中,其他线程可能会更改进程对所测试内存的访问。 即使函数指示进程具有对指定内存的读取访问权限,在尝试访问内存时也应使用结构化异常处理。 使用结构化异常处理使系统能够在发生访问冲突异常时通知进程,从而为进程提供处理异常的机会。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |