C++如何开发Windows驱动程序使用ObRegisterCallbacks保护游戏进程不被打开

云萱君_3940

云萱君_3940

2026-10-30

499人浏览

原创

ObRegisterCallbacks 在第三方驱动中不可靠,因自 Win10 1607 起仅限微软 WHQL 签名驱动使用,未签名调用会蓝屏;1809+ 默认禁用,且 PatchGuard 会检测绕过行为并触发崩溃。

c++如何开发windows驱动程序使用obregistercallbacks保护游戏进程不被打开

不能用 ObRegisterCallbacks 在普通 Windows 驱动中可靠保护游戏进程不被打开——它从 Windows 10 1607(RS1)起就被标记为“仅限微软签名驱动”,未通过 WHQL 认证的第三方驱动调用会直接触发系统蓝屏(BUGCODE_USB_DRIVER 或更常见的 ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY 变体),且自 Windows 10 20H1 起,该 API 默认禁用,需手动启用测试签名并绕过 PatchGuard 检查,实操风险极高。

为什么 ObRegisterCallbacks 在第三方驱动里大概率失败

Windows 内核在 ObRegisterCallbacks 入口处硬编码了对驱动签名证书链的校验逻辑:必须包含 Microsoft Code Signing PCA + Microsoft Windows Production PCA,且驱动文件需带有效 WHQL 签名时间戳。未满足时,内核会静默拒绝注册,并在 DbgPrint 中输出 "ObRegisterCallbacks: Invalid signature"(但不会写入事件日志)。即使强制 patch 绕过,PatchGuard 会在 5–15 分钟内检测到内核内存篡改并触发 CRITICAL_STRUCTURE_CORRUPTION。

  • Windows 10 1809+ 默认启用 KernelModeCodeIntegrity(KMCI),禁止任何未签名回调注册
  • ObRegisterCallbacks 返回 STATUS_ACCESS_DENIED 是最常见现象,不是权限不足,而是签名校验失败
  • 使用 Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlCIPolicy" -Name "Enabled" -Value 0 无效——这是用户态 CI 策略,不影响内核 ObCallback 校验

替代方案:用 PsSetCreateProcessNotifyRoutineEx + 进程句柄过滤

比硬刚 ObRegisterCallbacks 更可行的是在进程创建阶段拦截,再结合用户态配合关闭可疑句柄。该回调本身不受签名限制,且能拿到完整 PS_CREATE_NOTIFY_INFO 结构,包括父进程、镜像路径、是否为调试器启动等关键字段。

windows-screenshot-ocr
windows-screenshot-ocr

Windows全屏截图(自动标记鼠标位置)+ 原生OCR文字识别。本地运行,无需联网和API Key,适用于截图分析和自动化OCR场景。

下载
  • 注册成功后,可在回调中检查 CreateInfo->ImageFileName 是否匹配目标游戏路径(如 L"\??\C:\Games\Game.exe")
  • 若发现调试器(CreateInfo->ParentProcessId != 0 且父进程名为 dbgview.exe / x64dbg.exe),调用 ZwTerminateProcess 强制结束子进程
  • 注意:不能在回调中直接调用 ZwOpenProcess 打开自身或游戏进程——会引发递归锁死,应改用 PsLookupProcessByProcessId 获取 EPROCESS 后操作

用户态配合:用 NtQuerySystemInformation 监控句柄泄露

驱动层无法完全阻止 OpenProcess(PROCESS_ALL_ACCESS) 成功(尤其当调用方已是 SYSTEM 权限),真正可控的是后续行为。建议在用户态启动一个守护进程,每 500ms 调用一次 NtQuerySystemInformation( SystemHandleInformation, ... ),扫描所有句柄表,过滤出指向游戏进程 ID 的句柄,并检查其 GrantedAccess 是否包含 PROCESS_VM_READ 或 PROCESS_VM_WRITE。

  • 发现异常句柄后,用 NtDuplicateObject 复制句柄到当前进程,再调用 NtClose 关闭——这比驱动层暴力终止更隐蔽
  • 需提前用 ZwSetInformationProcess(..., ProcessProtectionLevel, ...) 将游戏进程设为 PROTECTION_LEVEL_WINTCB_LIGHT(Win10 1703+),提升句柄访问门槛
  • 该方法无法防御已提权到 SeDebugPrivilege 的进程,但能拦住大部分外挂注入工具的默认行为

真正难的不是注册回调,而是让整个机制在 Windows 10/11 各版本上稳定存活:PatchGuard 对 EPROCESS 字段修改、SSDT Hook、甚至某些 IRP Hook 都有严格监控;ObRegisterCallbacks 的签名墙只是第一道关卡,后面还有内核 PatchGuard 定时扫描、HVCI(基于虚拟化的安全)拦截、以及 Defender 驱动阻止列表(DDB)的动态封禁。没经过 WHQL 认证就硬上,等于主动给系统递蓝屏触发器。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关专题

更多
c++和c语言的区别有哪些
c++和c语言的区别有哪些

c++和c语言的区别:1、面向对象编程(OOP)支持不同;2、新增特性不同;3、标准库不同;4、编译方式不同;5、命名空间不同等等。想了解更多c++的相关内容,可以阅读本专题下面的文章。

2024.03.14

2268

9

c++和python学习顺序推荐
c++和python学习顺序推荐

一般建议先学习C++,再学习Python,因为这样可以逐步从较为底层的编程语言向更高级的语言过渡。想了解更多python的相关内容,可以阅读本专题下面的文章。

2024.03.14

1039

6

python和c++学习性价比分析
python和c++学习性价比分析

Python易于学习,广泛应用于Web开发、数据科学和人工智能等领域,但性能较低。C语言性能高,适用于对性能要求较高的场景,如游戏开发和系统编程,但学习曲线陡峭,错误处理复杂。想了解更多python的相关内容,可以阅读本专题下面的文章。

2024.03.14

447

5

c语言和c++一样吗
c语言和c++一样吗

c语言和c++是两种不同的编程语言,虽然有相似之处,但存在显著差异。c语言专注于过程式编程和系统级开发,以简洁、高效著称。c++作为c语言的超集,引入了面向对象编程,增强了代码组织和管理能力,但学习曲线也更陡峭。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

327

5

c语言和c++先学哪个好
c语言和c++先学哪个好

初学者选择学习c语言还是c++语言,需要根据个人学习目标、背景以及编程兴趣和预期应用方向来决定。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

426

5

c语言和c++的区别和联系
c语言和c++的区别和联系

c语言和c++是计算机科学领域应用广泛的编程语言。虽然它们有着相似的基础,但它们在语言类型、语法功能和内存管理方面存在着显著差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

600

5

c++软件中文更改教程
c++软件中文更改教程

对于 ide,可通过打开设置,找到语言设置,选择中文,并保存更改。对于非 ide 应用程序,可查找设置或选项,选择语言设置,更改为中文,并保存更改。想了解更多c++的相关内容,可以阅读本专题下面的文章。

2024.03.21

1429

9

python和java和c++学习性价比分析
python和java和c++学习性价比分析

Python以其易学性、丰富的库和活跃的社区而著称,适合数据科学、人工智能和Web开发。Java以其跨平台性、企业级应用开发和Android应用开发而闻名。C++以其底层控制能力、高效性能和游戏开发而著称。选择哪种语言取决于个人兴趣、职业方向和特定需求。想了解更多python和java和c++的相关内容,可以阅读本专题下面的文章。

2024.03.22

1237

7

c++和c语言学习顺序推荐
c++和c语言学习顺序推荐

对于初学者,建议先学习C语言,掌握编程基础后再转入C++,便于理解面向对象编程概念。有编程经验者可直接学习C++,快速接触高级编程技术。想了解更多c++和c语言的相关内容,可以阅读本专题下面的文章。

2024.03.25

1325

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习