RtlDeleteElementGenericTable小记

本文详细介绍了在Windows驱动程序开发中使用RtlDeleteElementGenericTable的过程,包括查找、删除元素及释放内存的步骤。通过反编译NtosKrnl.exe,解析了函数的内部实现,并探讨了FreeRoutine的原型及其简单实现,强调了Buffer参数与实际element的关系。
摘要由CSDN通过智能技术生成

实验室的产品需要添加一个驱动,其中用到了RTL_GENERIC_TABLE,也就不可避免地用到了RtlDeleteElementGenericTable。

RTL_GENERIC_TABLE默认实现是伸展树,RtlDeleteElementGenericTable主要执行三个步骤:

1. 查找要删除的element的位置。

2. 使用RtlDelete移除element,RtlDelete会调用RtlSplay调整树结构

3. 调用FreeRoutine释放element内存。

RtlDeleteElementGenericTable实现在NtosKrnl.exe中,将其反编译,得到的代码大致是:

uint RtlDeleteElementGenericTable(undefined4 *param_1,int param_2)
{
  int iVar1;
  int *piVar2;
  int iVar3;
  uint uVar4;
  undefined4 uVar5;
  
                    /* 0x1534fa  1067  RtlDeleteElementGenericTable */
  uVar4 = FUN_0055345c(param_2,&param_2);
  iVar3 = param_2;
  if ((uVar4 == 0) || (uVar4 != 1)) {
    uVar4 = uVar4 & 0xffffff00;
  }
  else {
    uVar5 = RtlDelete(param_2);
    *param_1 = uVar5;
    iVar1 = *(int *)(iVar3 + 0xc);
    piVar2 = *(int **)(iVar3 + 0x10);
    *piVar2 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值