DriverEntry的context
来源:互联网 发布:vb语言的有什么好处 编辑:程序博客网 时间:2024/05/18 02:00
转:DriverEntry的context
2.在用户态下,即使是single step int指令,也是跟不进去,这在硬件上是怎么做到的呢?(是不是int执行完不检查是不是处理single step模式?)
现在的 Legacy Device Driver 一样可以用 net start * 启动。
一般来说 DriverEntry 的调用序列如下:
_KiThreadStartup() + 0x16 [\base\ntos\ke\i386\threadbg.asm]
call eax ; SystemRoutine(StartRoutine, StartContext)
PspSystemThreadStartup() + 0x34 [\ntos\ps\create.c]
(StartRoutine)(StartContext)
ExpWorkerThread() + 0x100 [\base\ntos\ex\worker.c]
((PWORKER_THREAD_ROUTINE)WorkerRoutine) (Parameter);
IopLoadUnloadDriver() + 0x45 [\base\ntos\io\iomgr\internal.c]
status = IopLoadDriver( keyHandle, TRUE, FALSE, &driverEntryStatus );
IopLoadDriver() + 0x669 [\base\ntos\io\iomgr\internal.c]
status = driverObject->DriverInit( driverObject, ®istryPath->Name );
最后一句就是负责 call 驱动导出出口的代码,导出出口对于老版本编译器来说是DriverEntry(),对于新版本build的来说是GsDriverEntry()——金丝鸟/栈下溢小甜饼。
如果研究过Win句柄表或句柄对系统/驱动上下文的影响,应该清楚DriverEntry()位于SYSTEM上下文;未队列的Dispatch等位于调用者线程上下文;DPC For ISR、Timer DPC等位于任意线程上下文。如果不是很明白请参见我整理的这篇OSR经典文章:《Understanding and Using Execution Context in Windows NT Drivers》
http://advdbg.org/dfstore/img/Understanding%20and%20Using%20Execution%20Context%20in%20Windows%20NT%20Drivers.pdf
另外,如果想研究scm等,请参看以下链接:
http://www.codebreakers-journal.com/downloads/cbj/2004/CBJ_1_1_2004_Reverse_Engineering_the_Service_Control_Manager.pdf
http://mlabs.secniche.org/papers/Win_Xp_Svc_Int.pdf
DriverEntry是在系统上下文中执行的,不论是PnP过程发起的,还是服务管理器(SCM)发起的,它们不过都是向系统线程的工作队列中插入一个任务。
第二个问题问的非常好。很遗憾,我在写《软件调试》时没有讨论到这么深。其实,只要看一下CPU的“代码”,就有答案了。与其它指令在末尾检查TF位然后产生#DB异常不同,INT nn指令在末尾会清除TF位,而且不会产生#DB。这样这条指令本身就不会产生#DB,开始执行对应的异常处理例程时TF位已经没有了,所以也不会产生#DB。
DriverEntry确实是在System process的context下执行的,而scm启动driver service和其它service是不一样的,它应该是直接通过了系统调用nt!NtLoadDriver,而不是去新启动进程,然后和其通信,nt!NtLoadDriver里面会判断本身在不在System process的context下,如果不在的话,就queue一个workiterm到系统线程,然后等待加载完成事件,等到再做返回...
- DriverEntry的context
- DriverEntry
- DriverEntry
- wdk 框架下的DriverEntry
- 8.2.3 键盘过滤模块的DriverEntry
- 一个简单的NT驱动之驱动入口函数(DriverEntry)
- WinDBG调试驱动时中断DriverEntry的方法
- 为什么vc编译的时候DriverEntry前要加extern "C"?
- windbg停在无符号驱动的DriverEntry(WIN10)
- WinDBG调试驱动时中断DriverEntry的方法
- DriverEntry程序
- DriverEntry程序
- DriverEntry程序
- golang 的 context.Context
- sfilter的DriverEntry例程中创建的控制设备对象之作用
- 调试无符号驱动的时,快速到达DriverEntry的方法——2
- 调试无符号驱动的时,快速到达DriverEntry的方法——2
- 调试无符号驱动的时,快速到达DriverEntry的方法——2
- 最小费用最大流模板
- Gauss Fibonacci
- HTML格式的Form表单文件FOLDER.htm的内容
- 设计模式 策略模式 以角色游戏为背景
- 画出各种自定义的窗体形状
- DriverEntry的context
- 我的第一篇博客就写写我的工作吧
- html中head里的meta标签的用法
- 发布一个破解微软脚本加密算法的vbScript 脚本
- WEB的打印大全方法
- 编程之美初赛第一场
- error LNK2001: 无法解析的外部符号 ___wargv
- 黑马程序员-讲解Colletion共性方法学习日记
- XML是一种标识语言