内核常用内存操作函数

申请内存

PVOID ExAllocatePoolWithTag(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

参数1 :PoolType
常用值为:
NonPagedPool(非分页内存)
PagedPool (分页内存)

参数2:NumberOfBytes
需要申请内存的大小

参数3: Tag
为将要被分配的空间指定标志。赋给该参数的内容是一个字符串常量,最多可以包含四个字母,该字符串应该放到单引号当中(比如:‘tag1’‘tag2’)。另外,这个字符串常常是逆序的,如,‘1gaT’。输入到这个参数中的每一个字符的ASCII值都必须在0-127之间。每次的申请空间的时候都最好应该使用一个独一无二的标识,这样可以帮助调试器和检查器辨认和分析。
系统会在分配给你的返回值前面额外分配4字节存储这个标签

注意:申请的内存是没有被初始化的,需要自己进行初始化。(必须)
返回值:
该函数成功返回分配地址的指针,失败返回NULL

给指定内存赋值

void RtlFillMemory(
   Destination,
   Length,
   Fill
);

参数1 :Destination
需要填充的地址(指针类型)
参数2 :Length
需要填充的长度
参数3 :Fill
填充的值

移动内存

VOID RtlMoveMemory(
  _Out_       VOID UNALIGNED *Destination,
  _In_  const VOID UNALIGNED *Source,
  _In_        SIZE_T         Length
);

参数1 :Destination
目标地址
参数2 :Source
来源地址
参数3 :Length
要移动的长度

复制内存

RtlCopyMemory
参数与移动内存一样,移动内存时目标地址和来源地址可以有重叠,而复制内存不可以

内存比较

NTSYSAPI SIZE_T RtlCompareMemory(
  const VOID *Source1,
  const VOID *Source2,
  SIZE_T     Length
);

返回值:如果比较的内存完全相等,则返回Length ,可以判断返回值和Length参数是否相等,从而判断两个内存是否相等。

释放内存

void ExFreePoolWithTag(
  PVOID P,
  ULONG Tag
);

参数1:
释放的地址
参数2:
调用ExAllocatePoolWithTag指定的tag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值