KeAttachProcess
-
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntifs/nf-ntifs-keattachprocess
The KeAttachProcess routine is exported to support existing driver binaries and is obsolete.
[popexizhi: KeAttachProcess 当前不再推荐使用了, 替代使用是 KeStackAttachProcess
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntifs/nf-ntifs-kestackattachprocess
这个KeAttachProcess 说是导出出口,用以支持当前驱动使用,不是很明白为什么存在还要导出,想来是和机制有关go一下吧
]
此方法的目的:
http://www.ccidnet.com/2010/0714/2114941.shtml
-
KeAttachProcess() 函数的流程,
当调用此函数时,
首先从 KPCR 结构中得到当前线程 ETHREAD 结构,
并提升当前 IRQL 为 DISPATCH_LEVEL(防止在进程切换中被其他软件列程所中断),
并从形参中取出要切换进程的 EPROCESS结构与当前进程 EPROCESS 结构进行比较,
如果是当前进程的话,则降低当前 IRQL 为初始值,函数返回。[popexizhi: 这里好奇怪为什么不在提升前先判断呢?]
如果要进行切换的进程不是当前进程的话,
- 先要判断当前线程是否处于 APC 与 DPC 活动状态(ETHREAD->ApcStateIndex,KPCR->DpcRoutineActive),
-- 如果是则不允许动态切换进程,跳转到蓝屏处,系统崩溃。(微软规定在进行动态切换时不允许 APC ,DPC 列程运行,否则将系统崩溃,这应该不是必须的)[popexizhi: 这个是说 连返回err的机会都没有吗?还是返回错误后,如果不处理调用蓝屏呢?看这里的描述应该是不必须蓝屏应该是没有处理吧?!]
-- 如果不是则从形参中取当前线程(ETHREAD)、要切换的进程(EPROCESS)初始的 IRQL 值和当前线程的APC 保存状态 (ETHREAD->SavedApcState) 做为参数,来调用 KiAttachProcess()函 数完成具体的切换。
从上面可以看出 KeAttachProcess() 函数只是进行了一些相关参数的设置和系统境的判断
-
KeAttachProcess() 函数的流程,
没有评论:
发表评论