如果你写过驱动,却只会用 SSDT Hook 或者硬编码偏移去拦 API,那这门课要补的就是另一块:Windows 自己留给你的回调口子。它不要求你去做逆向对抗,而是用系统公开的机制拿到进程创建、线程启动、模块加载、注册表读写这些事件的通知。适合已经能编译出一个能加载的驱动、但说不清 PsSetCreateProcessNotifyRoutine 和 ObRegisterCallbacks 区别的人。
先确认自己缺的是哪一块
回调不是单一 API,而是一组用途不同的注册接口,缺口通常出在三个地方:
- 分不清「通知」和「拦截」。进程、线程创建回调只能事后知道,而对象回调可以在操作发生前决定放行还是拒绝,选错接口就写不出想要的效果。
- 不知道回调在哪个进程上下文、哪个 IRQL 上执行。很多人在回调里调用会阻塞的函数,蓝屏之后仍不知道原因,这属于执行环境没搞清楚。
- 注销时机处理不当。驱动卸载前没有反注册,回调函数指针变成野指针,系统在下次事件触发时直接崩溃。
这门课围绕的就是这几类具体问题,而不是泛泛讲内核编程。
课程会碰到的具体机制
进程与线程方向,重点是创建回调的注册、回调参数里父进程与镜像路径怎么读、如何在其中做进程过滤。模块加载方向,关注驱动与 DLL 加载时的通知,以及怎么结合路径判断拿到你关心的模块。注册表方向,涉及注册表回调的注册方式、回调中能获取的键路径与操作类型,以及哪些操作会被触发。对象回调这块,会讲到句柄打开时的权限校验逻辑,这也是很多人真正想用来做保护的地方。每个机制都对应「注册—回调中处理—注销」这条完整链路,缺任何一环,代码在真实环境里都跑不稳。
配套要动手的东西
只看不写没用。建议边看边做这几件事:写一个最小驱动,注册进程创建回调,把新进程的 PID 和镜像路径打到调试输出里,用 DbgView 确认能看到;再注册一个线程回调,观察同一进程下线程创建的通知频率;然后注册表回调,用 regedit 改一个键,看回调是否被触发、操作类型是什么。每一步都要在卸载时正确反注册,并故意去掉反注册跑一次,亲眼看到卸载后的事件触发会出问题。这些练习比记 API 原型有用得多。
看完应该能回答的问题
- 进程创建回调能不能阻止进程启动?不能的话,想拦截该用哪个回调?
- 对象回调里的操作类型和访问掩码分别代表什么,怎么据此判断一次句柄打开该不该放行?
- 回调函数运行在什么 IRQL,哪些常见内核函数在回调里不能调用?
- 多个回调同时存在时,返回状态如何影响最终结果,谁先谁后?
- 驱动卸载时漏掉反注册,为什么会在之后的某次事件里崩溃,而不是立刻崩溃?
如果这些问题你现在答不上来,或者只能答一半,这门课按顺序看下去,缺口能补上。如果已经能准确说出执行环境和注销风险,那可以跳过前面直接看对象回调和注册表部分。
Windows内核-系统回调
课程详情
课程标题:Windows内核-系统回调
本课程主要讲解Windows系统为我们提供的回调机制,旨在帮助学员深入理解如何通过这些机制来监控进程、线程、加载模块以及注册表操作。
适合人群
- 对游戏安全感兴趣的人群
- 对游戏逆向感兴趣的人群
学习收获
- 掌握Windows系统回调机制的基本原理
- 学会如何利用回调机制监控进程和线程
- 了解模块加载和注册表操作中的回调应用
课程亮点
- 深入浅出,理论与实践相结合
- 案例丰富,实用性强
- 专业讲师,答疑解惑
课程目录
01 01.进程回调 02 02.线程回调 03 03.模块加载回调 04 04.注册表回调 05 05.时间变更回调 06 06.让回调失效





