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 判断。