html tool

2019年4月8日星期一

KeAttachProcess




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() 函数只是进行了一些相关参数的设置和系统境的判断
              



没有评论:

发表评论