运行时函数名的前缀均为Rtl。
一、非重叠内存复制
RtlCopyMemory
二、重叠内存复制
RtlMoveMemory
三、填充内存
RtlFillMemory
四、内存填零
RtlZeroBytes
RtlZeroMemory
似乎内存填零的操作也可以用填充内存的RtlFillMemory来实现。
五、内存比较
RtlCompareMemory
六、检查内存是否可读
ProbeForRead
七、检查内存是否可写
ProbeForWrite
第六、七这两个函数不能返回TRUE或FALSE,而是会引发异常。
七、示例代码
#define BUFFER_SIZE 1024
#pragma INITCODE
VOID RtlTest()
{
PUCHAR pBuffer = ( PUCHAR ) ExAllocatePool( PagedPool, BUFFER_SIZE );
//用零填充内存
RtlZeroMemory( pBuffer, BUFFER_SIZE );
PUCHAR pBuffer2 = ( PUCHAR ) ExAllocatePool( PagedPool, BUFFER_SIZE );
//用固定字节填充内存
RtlFillMemory( pBuffer2, BUFFER_SIZE, 0xAA );
//内存复制
RtlCopyMemory( pBuffer, pBuffer2, BUFFER_SIZE );
//判断内存是否一致
ULONG ulRet = RtlCompareMemory( pBuffer, pBuffer2, BUFFER_SIZE );
if ( ulRet == BUFFER_SIZE )
{
KdPrint( ( "两个内存块一致!" ) );