首页 > 系统相关 >Windows内核驱动-进程回调

Windows内核驱动-进程回调

时间:2024-11-01 13:21:08浏览次数:1  
标签:INFO Windows CREATE 内核 移除 进程 驱动 回调 NOTIFY

一、核心代码

一共三部分:

  1. 定义回调函数
  2. 注册回调
  3. 移除回调
#include <ntddk.h>

// 定义回调函数,在后续实现
VOID ProcessNotifyRoutine(
	_Inout_ PEPROCESS Process,    // 进程对象,这是个不透明结构,不建议强行使用其中的字段
	_In_ HANDLE ProcessId,        // 进程ID
	_In_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo  // 进程创建信息
);

// 定义卸载函数,在后续实现
NTSTATUS DriverUnload(_In_ PDRIVER_OBJECT DriverObject);

// 在DriverEntry中注册回调
NTSTATUS
DriverEntry(
	_In_ PDRIVER_OBJECT  DriverObject,
	_In_ PUNICODE_STRING RegistryPath
)
{
	UNREFERENCED_PARAMETER(RegistryPath); // 未使用的参数,需要UNREFERENCED_PARAMETER处理,不然会warning

	NTSTATUS status;
	// 注册卸载函数
	DriverObject->DriverUnload = DriverUnload;

	// 注册进程回调,第二个参数表示是否移除,true表示移除,false表示注册
	status = PsSetCreateProcessNotifyRoutineEx(ProcessNotifyRoutine, FALSE);
	return STATUS_SUCCESS;
}

// 在卸载函数中移除回调
NTSTATUS DriverUnload(_In_ PDRIVER_OBJECT DriverObject)
{
	UNREFERENCED_PARAMETER(DriverObject);
	NTSTATUS status;
	// 移除回调,第二个参数表示是否移除,true表示移除,false表示注册
	status = PsSetCreateProcessNotifyRoutineEx(ProcessNotifyRoutine, TRUE);
	return status;
}

// 进程回调实现
VOID ProcessNotifyRoutine(
	_Inout_ PEPROCESS Process,    // 进程对象,这是个不透明结构,不建议强行使用其中的字段
	_In_ HANDLE ProcessId,        // 进程ID
	_In_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo  // 进程创建信息
	)
{
	UNREFERENCED_PARAMETER(Process);
	UNREFERENCED_PARAMETER(ProcessId);
	UNREFERENCED_PARAMETER(CreateInfo);
	// 这里可以记录进程的创建和销毁

	if (CreateInfo != NULL) 
	{
		// 进程创建

		// 如果需要阻止进程创建,则可以
		// 设置 CreateInfo 中的 CreationStatus 字段为 STATUS_ACCESS_DENIED
		
		// CreateInfo->CreationStatus = STATUS_ACCESS_DENIED;
	}
	else
	{
		// 进程销毁
	}
}


二、关键操作

2.1 链接器设置

上述代码编译后,无法正确触发 ProcessNotifyRoutine 回调,需要为链接器增加参数:

/INTEGRITYCHECK

这一点需要着重注意。

2.2 PsSetCreateProcessNotifyRoutineEx 注册回调

函数原型:

NTSTATUS
PsSetCreateProcessNotifyRoutineEx (
    _In_ PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
    _In_ BOOLEAN Remove
);

参数解释:
第一个参数:回调函数,当进程创建或者销毁时会调用此函数,类型为 PCREATE_PROCESS_NOTIFY_ROUTINE_EX
第二个参数:是否移除,true表示移除,false表示注册

其中PCREATE_PROCESS_NOTIFY_ROUTINE_EX 定义为:

typedef
VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE_EX) (
    _Inout_ PEPROCESS Process,
    _In_ HANDLE ProcessId,
    _Inout_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo
    );

PEPROCESS 是内核态进程对象,HANDLE 是进程ID,PPS_CREATE_NOTIFY_INFO 是进程创建信息,如果为NULL,表示进程销毁,否则表示进程创建。

2.3 获取进程信息

如上的 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 定义,我们可以通过回调函数的 CreateInfo 参数获取进程相关信息。

PPS_CREATE_NOTIFY_INFO 定义如下:

typedef struct _PS_CREATE_NOTIFY_INFO {
    _In_ SIZE_T Size;
    union {
        _In_ ULONG Flags;
        struct {
            _In_ ULONG FileOpenNameAvailable : 1;
            _In_ ULONG Reserved : 31;
        };
    };
    _In_ HANDLE ParentProcessId;
    _In_ CLIENT_ID CreatingThreadId;
    _Inout_ struct _FILE_OBJECT *FileObject;
    _In_ PCUNICODE_STRING ImageFileName;
    _In_opt_ PCUNICODE_STRING CommandLine;
    _Inout_ NTSTATUS CreationStatus;
} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;

可以直接获得:

  • ParentProcessId:父进程ID
  • CreatingThreadId:创建进程的线程ID
  • FileObject:文件对象,可以获得文件路径
  • ImageFileName:进程映像文件名,也就是可执行文件路径
  • CommandLine:进程启动命令行,如果为NULL,表示没有命令行,否则为命令行字符串

2.4 阻止进程创建

PPS_CREATE_NOTIFY_INFO 中有一个 CreationStatus 字段,如果设置为 STATUS_ACCESS_DENIED,则表示阻止进程创建。

三、参考资料

[1] Windows 内核不透明结构
[2] PsSetCreateProcessNotifyRoutineEx 函数 (ntddk.h)
[3] PCREATE_PROCESS_NOTIFY_ROUTINE_EX回调函数 (ntddk.h)
[4] PS_CREATE_NOTIFY_INFO 结构 (ntddk.h)

标签:INFO,Windows,CREATE,内核,移除,进程,驱动,回调,NOTIFY
From: https://www.cnblogs.com/hearkenundermoon/p/18519955

相关文章

  • Mac和Windows最全快捷键 - Photoshop2024
    在数字化图像处理的世界里,Photoshop一直是专业设计师和摄影师的首选工具。无论是在图像编辑、图层处理还是各种效果应用上,Photoshop的功能都令人称赞。然而,Photoshop功能繁多,如果一一通过菜单查找,不仅耗时而且不够高效。熟练掌握快捷键可以极大地提高工作效率,让操作更加流畅。......
  • 利用 AWS 的事件驱动数据网格架构应对现代数据挑战
    背景   在当今数据驱动的世界中,企业必须适应数据管理、分析和利用方式的快速变化。传统的集中式系统和单片式架构虽然在历史上已经足够,但已无法满足企业日益增长的需求,因为企业需要更快地实时获取数据见解。事件驱动数据网格架构是这一领域的革命性框架,与AWS服务结合后,它将......
  • Windows Active Directory技术介绍和应用——删除计算机对象
    大纲问题描述操作方案题外参考资料问题描述当我们配置ActiveDirectory时,往往会遇到部分机器需要重新加入域的场景。而这种情况下,可能会收到如下的报错。Thejoinoperationwasnotsuccessful.Thiscouldbebecauseanexistingcomputeraccounthavingname......
  • 驱动开发目标测试机器设置
    设置系统为测试模式关闭驱动程序强制签名设置调试消息筛选器掩码一、系统要求需要管理员权限,开启部分功能需要管理员权限不能使用教育版或者家庭版操作系统,可以使用专业版、企业版、旗舰版什么的。部分功能在家庭版中无法开启。二、开启测试模式直接执行命令:bcdedit/......
  • windows查看文件/夹被哪个进程占用以及解除方法
    方法一:使用任务管理器打开任务管理器:右键点击任务栏,选择“任务管理器”。访问资源监视器:在任务管理器中,切换到“性能”选项卡。点击左下方的“打开资源监视器”。查找占用文件的进程:在“资源监视器”窗口中,切换到“CPU”选项卡。展开“关联的句柄......
  • 感人电影-521我爱你 PSVita+Switch+Windows+Mac移植版
    游戏名称:感人电影-521我爱你游戏类型:文字冒险游戏原发售平台:J2ME开发商:F23发布日期:2010/01/03原游戏简介:感人电影-521我爱你最新感动人的科技!是人看了都要哭!超越生死的爱情,用电话联系起来的男女主角命运,让你有意想不到的结局。让你看后更珍惜所爱的人!Renpy技术支持:你们亲......
  • DaVinci Resolve Studio 19.0.3 (macOS, Windows) - 剪辑、调色、特效和音频后期制作
    DaVinciResolveStudio19.0.3(macOS,Windows)-剪辑、调色、特效和音频后期制作BlackmagicDesignDaVinciResolveStudio请访问原文链接:https://sysin.org/blog/blackmagic-design-davinci-resolve/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgDaVinciRe......
  • Fusion Studio 19.0.3 (macOS, Windows) - 视觉特效、3D、VR 及动态图形解决方案
    FusionStudio19.0.3(macOS,Windows)-视觉特效、3D、VR及动态图形解决方案BlackmagicDesignFusionStudio请访问原文链接:https://sysin.org/blog/blackmagic-design-fusion/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgFusion19登场卓越领先的视觉特......
  • Autodesk Maya 2025.3 Multilanguage (macOS, Windows) - 三维动画和视觉特效软件
    AutodeskMaya2025.3Multilanguage(macOS,Windows)-三维动画和视觉特效软件三维计算机动画、建模、仿真和渲染软件请访问原文链接:https://sysin.org/blog/autodesk-maya/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org三维计算机动画、建模、仿真和渲染软件......
  • Autodesk AutoCAD 2025.1 (macOS, Windows) - 自动计算机辅助设计软件
    AutodeskAutoCAD2025.1(macOS,Windows)-自动计算机辅助设计软件AutoCAD2024开始原生支持AppleSilicon请访问原文链接:https://sysin.org/blog/autodesk-autocad/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org具有设计自动化以及工具组合、Web和移动应......