回调监控进线程创建和退出

两个注册回调的函数:PsSetCreateProcessNotifyRoutine   进程回调PsSetCreateThreadNotifyRoutine    线程回调分别对应的回调函数类型:

VOID MyCreateProcessNotify
(IN HANDLE ParentId,IN HANDLE ProcessId,IN BOOLEAN Create
)
{if (Create) {DbgPrint("[monitor_create_process_x64]进程创建! PID=%ld;PPID=%ld\n", ProcessId, ParentId);}else {DbgPrint("[monitor_create_process_x64]进程退出! PID=%ld;PPID=%ld\n", ProcessId, ParentId);}
}VOID MyCreateThreadNotify
(IN HANDLE  ProcessId,IN HANDLE  ThreadId,IN BOOLEAN  Create
)
{if (Create) {DbgPrint("[monitor_create_process_x64]线程创建! PID=%ld;TID=%ld\n", ProcessId, ThreadId);}else {DbgPrint("[monitor_create_process_x64]线程退出! PID=%ld;TID=%ld\n", ProcessId, ThreadId);}
}
注册回调:
PsSetCreateProcessNotifyRoutine(MyCreateProcessNotify, FALSE);
PsSetCreateThreadNotifyRoutine(MyCreateThreadNotify);注销回调(在DriverUnload里面调用):
PsSetCreateProcessNotifyRoutine(MyCreateProcessNotify, TRUE);
PsRemoveCreateThreadNotifyRoutine(MyCreateThreadNotify);

执行结果:

OK上面很好理解,就是进程线程创建退出的时候会对应的调这些回调,通过这个我们可以监控进程和线程的调用和退出情况。但是在学习过程中书上说了这个回调:

PsSetCreateProcessNotifyRoutineEx ,

这个的回调函数参数不同于PsSetCreateProcessNotifyRoutine,

VOID MyCreateProcessNotifyEx(__inout   PEPROCESS Process,__in      HANDLE ProcessId,

__in_opt  PPS_CREATE_NOTIFY_INFO CreateInfo

){}

通过第三个参数CreateInfo->CreationStatus=STATUS_UNSUCCESSFUL;

但是一直卡在一个地方:

查了很多地方,是说在source文件里添加:LINKER_FLAGS=/INTEGRITYCHECK

不过我用的WDK+Vs2015开发的,我理解的source是改.rc文件但是失败了,一直在找解决方案。找到再把这个补上吧,目的是为了使用Ex的函数进行进程创建劫持。

Win64 驱动内核编程-12.回调监控进线程创建和退出相关推荐

  1. Win64 驱动内核编程-11.回调监控进线程句柄操作

    无HOOK监控进线程句柄操作 在 NT5 平台下,要监控进线程句柄的操作. 通常要挂钩三个API:NtOpenProcess.NtOpenThread.NtDuplicateObject.但是在 VI ...

  2. Win64 驱动内核编程-14.回调监控文件

    回调监控文件 使用 ObRegisterCallbacks 实现保护进程,其实稍微 PATCH 下内核,这个函数还能实现文件操作监视.但可惜只能在 WIN7X64 上用.因为在 WIN7X64 上 P ...

  3. Win64 驱动内核编程-15.回调监控注册表

    回调监控注册表 在 WIN32 平台上,监控注册表的手段通常是 SSDT HOOK.不过用 SSDT HOOK 的方式监控注册表实在是太麻烦了,要 HOOK 一大堆函数,还要处理一些 NT6 系统有而 ...

  4. Win64 驱动内核编程-30.枚举与删除线程回调

    枚举与删除线程回调 进程回调可以监视进程的创建和退出,这个在前面的章节已经总结过了.某些游戏保护的驱动喜欢用这个函数来监视有没有黑名单中的程序运行,如果运行则阻止运行或者把游戏退出.而线程回调则通常用 ...

  5. Win64 驱动内核编程-13.回调监控模块加载

    回调监控模块加载 模块加载包括用户层模块(.DLL)和内核模块(.SYS)的加载.传统方法要监控这两者加在必须 HOOK 好几个函数,比如 NtCreateSection 和 NtLoadDriver ...

  6. Win64 驱动内核编程-31.枚举与删除映像回调

    枚举与删除映像回调 映像回调可以拦截 RING3 和 RING0 的映像加载.某些游戏保护会用此来拦截黑名单中的驱动加载,比如 XUETR.WIN64AST 的驱动.同理,在反游戏保护的过程中,也可以 ...

  7. Win64 驱动内核编程-8.内核里的其他常用

    内核里的其他常用 1.遍历链表.内核里有很多数据结构,但它们并不是孤立的,内核使用双向链表把它们像糖 葫芦一样给串了起来.所以遍历双向链表能获得很多重要的内核数据.举个简单的例子,驱 动对象 Driv ...

  8. Win64 驱动内核编程-18.SSDT

    SSDT 学习资料:http://blog.csdn.net/zfdyq0/article/details/26515019 学习资料:WIN64内核编程基础 胡文亮 SSDT(系统服务描述表),刚开 ...

  9. Win64 驱动内核编程-3.内核里使用内存

    内核里使用内存 内存使用,无非就是申请.复制.设置.释放.在 C 语言里,它们对应的函数是:malloc.memcpy.memset.free:在内核编程里,他们分别对应 ExAllocatePool ...

最新文章

  1. 怎么看待传菜机器人_太科幻了!这家顺德菜餐厅里全是机器人,炒菜送菜样样行...
  2. Golang 反射操作整理
  3. 平果手机桌面计算机,苹果手机便签记事本怎么在Windows电脑桌面上使用?
  4. 计算机系统设计原理当当,操作系统精髓与设计原理
  5. Linux初级运维(十七)——Linux内核编译与系统裁减
  6. 四周年了,谈谈一个程序员的职场心得
  7. SQLServer组成:
  8. 在VMware安装Windows server 2003步骤
  9. 最全的世界地图矢量素材下载(AI、EPS、SVG格式)
  10. 怎么用域名?域名使用步骤
  11. icinga ido2db
  12. 串联四足机器人基础知识
  13. 美国人眼中的大数据法律问题
  14. 音乐计算机编程,计算机音乐编程的基本类型研究
  15. python can总线_MicroPython教程之TPYBoard v102 CAN总线通信
  16. 利用c/c++打造烟花表白程序,撩妹一撩一个准!
  17. python平行四边形函数_在Python中,如何确定一个点是否在某个平行四边形内?
  18. DockerHub上最受欢迎的151个官方镜像,相传掌握第17个可以主宰宇宙!
  19. ipmitool 修改
  20. 无法运行rc.exe(已解决)

热门文章

  1. 树状数组模板1——单点修改区间查询
  2. 每天进步一点之C\C++
  3. 推荐些在线小制作小工具
  4. HTML5 应用的现状与前景
  5. 人的一生,有三件事情不能等
  6. MySQL Percona Toolkit--pt-osc与online DDL选择
  7. Mac怎么刷新DNS缓存
  8. Kubernetes-基于k8s-v1.14.2安装dashboard-1.10.1
  9. asp.net core mvc 异步表单(Ajax.BeginForm)
  10. Android开发之带你轻松集成友盟统计