驱动编程学习三 进程监控
x64内核HOOK技术之拦截进程.拦截线程.拦截模块 - iBinary - 博客园 (cnblogs.com)
在前面的 驱动程序 工程中 添加 监控进程 类 添加后把类自动生成的代码全部删除 成空类 在主文件 中包含 #include "监控进程.h"
监控进程.h 头文件中
#pragma once void 安装进程监控(); //通过DriverEntry 或者 DeviceIoControl 来安装 void 卸载进程监控(); //通过DriverUnload
监控进程.cpp 实现文件中
#pragma once #include "监控进程.h" #include <ntifs.h> //https://www.cnblogs.com/iBinary/p/8399312.html //PsSetLoadImageNotifyRoutine(PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); //PsSetCreateProcessNotifyRoutineEx(); NTSTATUS PsSetCreateProcessNotifyRoutine( PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,//这是一个回调函数指针 BOOLEAN );//安装为假,卸载时为真。 //PCREATE_PROCESS_NOTIFY_ROUTINE PcreateProcessNotifyRoutine; VOID NotifyRoutine( HANDLE ParentId,HANDLE ProcessId,BOOLEAN Create) { if (Create) { KdPrint(("jw:ParentId = %d ProcessId = %d 进程创建 \r\n", ParentId, ProcessId)); } else { KdPrint(("jw:ParentId = %d ProcessId = %d 进程退出 \r\n", ParentId, ProcessId)); } } void 安装进程监控() { PsSetCreateProcessNotifyRoutine(NotifyRoutine, FALSE); } void 卸载进程监控() { PsSetCreateProcessNotifyRoutine(NotifyRoutine, TRUE); }
在 入口函数中 调用 在 卸载驱动 中 卸载 进程监控
//卸载驱动 void Unload(PDRIVER_OBJECT driver) {//因为参数driver没有使用,会出现警告。 卸载进程监控(); //一定要在删除设备前 先删除符号链接 UNICODE_STRING uzMyLinsName; //符号链接名字 RtlInitUnicodeString(&uzMyLinsName, 符号链接名字);//初始化字符串 IoDeleteSymbolicLink(&uzMyLinsName); //删除设备对象 IoDeleteDevice(driver->DeviceObject); KdPrint(("jw:进入卸载例程")); } //驱动入口点函数 NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING szReg) { KdPrint(("jw:我的第一个驱动,最简单的驱动+++++++++")); KdPrint(("jw:注册路径 = %wZ", szReg));//szReg注册表的路径 driver->DriverUnload = Unload;//注册卸载例程 //irp处理 driver->MajorFunction[IRP_MJ_CREATE] = IRP_PROC; driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IRP_PROC; driver->MajorFunction[IRP_MJ_CLOSE] = IRP_PROC; //调用创建驱动设备函数 CreateDevice CreateDevice(driver);//创建驱动设备 安装进程监控();//调用 return STATUS_SUCCESS; };//最小的驱动 只有一行代码。
浙公网安备 33010602011771号