实现效果
本例最终实现了,启动驱动后会捕获所有打开的应用程序信息,并且在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>