话不多说,直接上代码
原理:
先分配一个Mapper,用MmAllocateIndependentPages的原因是不会分配出大页,用ExAllocatePool等api是有概率分配出大页Pde内存的哦
获取Mapper的Pte并保存原始Pfn,用于后续还原
改Pte->Pfn使得Mapper映射我们的物理地址,刷tlb,拷贝内存,还原Pfn
关中断的原因是invlpg之后切到其他核心会导致在其他核心的tlb没被刷新从而拷贝到错误的数据,其实提升irql就行了
注意事项:
多核情况要注意分配多个Mapper给每个核心使用
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课