内存的分配和链表

这篇博客介绍了如何使用链表在驱动程序中记录和打印启动及卸载期间打开的应用程序信息。通过定义结构体、链表初始化、回调函数启用,实现了内存分配与管理,避免内存泄露,并在驱动卸载时打印完整链表,展示所有进程ID和名称。
摘要由CSDN通过智能技术生成

实现效果

本例最终实现了,启动驱动后会捕获所有打开的应用程序信息,并且在debugview里面打印出应程序的执行名称,和ID号,
在驱动卸载后会打印出所有应用程序的信息,应用程序是保存在链表里面的。

内存分配

查找内存泄露的工具 PoolMonX.exe
在这里插入图片描述

//-----------------内存分配---------------
	PVOID tempbuffer = ExAllocatePoolWithTag(NonPagedPool,0x1000,'xxaa');

在这里插入图片描述

链表

知识点
链表初始化

先定义一个结构 ,和链表头

/// <summary>
/// 自定义的结构体
/// </summary>
typedef struct _Mystruct
{
   
	LIST_ENTRY list;//链表的指针,有前后两个指针

	HANDLE pid;

	PEPROCESS peprocessobj;

	BYTE processname[16];
}Mystruct,*PMyStruct;

LIST_ENTRY listhead = {
    0 };//链表头

初始化函数

	InitializeListHead(&listhead);//初始化链表头
	DbgPrint("--%p--%p--%p--\n",&listhead,listhead.Flink,listhead.Blink);

运行效果,链表,链表前指针,和后指针都一样
在这里插入图片描述

定义一个回调函数,获取电脑打开软件的信息,就是进程ID

/// <summary>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值