VB,IsBadReadPtr,IsBadWritePtr,检查内存函数功能详解,IsBadReadPtr 是用来判断指定的内存范围是否可以用来进行读取操作,IsBadWritePtr 是用来判断指定的内存范围是否可以用来进行写入操作。
---------------------------------------------------------------------------------------------
IsBadReadPtr 函数详解
函数原型:
BOOL IsBadReadPtr(CONST VOID *lp,UINT_PTR ucb);
参数详解:
lp 表示要检查的内存指针
ucb 要检查的内存块的大小
函数声明:
Private Declare Function IsBadReadPtr Lib "kernel32" (lp As Any, ByVal ucb As Long) As Long
函数说明:
IsBadReadPtr 是用来判断指定的内存范围是否可以用来进行读取操作。
函数返回值:
如果调用进程有权限访问该内存,则返回“0”。否则,返回非“0”。
-----------------------------------------------------------------------------------------------
IsBadWritePtr 函数详解
参数详解:
lp 表示要检查的内存指针
ucb 要检查的内存块的大小
函数声明:
Private Declare Function IsBadWritePtr Lib "kernel32" (lp As Any, ByVal ucb As Long) As Long
函数说明:
IsBadWritePtr 是用来判断指定的内存范围是否可以用来进行写入操作。
函数返回值:
如果调用进程有权限访问该内存,则返回“0”。否则,返回非“0”。
-----------------------------------------------------------------------------------------------
使用实例:
MsgBox IsBadReadPtr(ByVal &H0, 4)
MsgBox IsBadWritePtr(ByVal &H0, 4)
If IsBadReadPtr(H, 4) = 0 And IsBadWritePtr(Tmp, 4) = 0 Then
CopyMemory Tmp, ByVal H, 4
End If
使用说明:
该函数检查调用进程是否有读取指定内存的内容的权限,微软提供的32位(Win7等64位操作系统不支持该API)操作系统下的API。
但是像“CopyMemory”、“ZeroMemory”这种底层 API 是非常容易造成程序崩溃的,例如下面的代码执行就会崩溃(100% 概率):
ZeroMemory ByVal 0&, 1
因此,强烈建议您在使用读写内存操作时,若无法肯定某块内存可用时,先使用 IsBadReadPtr 和 IsBadWritePtr 判断。