Operating system Windows内核模式驱动程序如何访问分页内存?

Operating system Windows内核模式驱动程序如何访问分页内存?,operating-system,window,kernel,driver,wdm,Operating System,Window,Kernel,Driver,Wdm,1) usermode进程有自己的“地址上下文”,它将用户模式虚拟地址映射到物理页面帧的唯一集合。 也就是说,随着Windows XP调度程序切换线程,任何特定虚拟地址的含义都会随着时间的推移而改变 “切换线程”的部分工作是更改页表,以便它们引用传入线程的进程上下文 _ 2) Windows内核模式驱动程序在“任意线程上下文”中执行 驱动程序可以创建一个系统线程并在其上下文中工作……但我所说的是不创建系统线程的情况 驱动程序可以使用“ExAllocatePoolWithTag”分配分页(易失性存

1) usermode进程有自己的“地址上下文”,它将用户模式虚拟地址映射到物理页面帧的唯一集合。 也就是说,随着Windows XP调度程序切换线程,任何特定虚拟地址的含义都会随着时间的推移而改变

“切换线程”的部分工作是更改页表,以便它们引用传入线程的进程上下文

_

2) Windows内核模式驱动程序在“任意线程上下文”中执行

驱动程序可以创建一个系统线程并在其上下文中工作……但我所说的是不创建系统线程的情况

驱动程序可以使用“ExAllocatePoolWithTag”分配分页(易失性存储器中的内存)

_

3) 那么,驱动程序如何在没有任何上下文的情况下访问分页内存呢

如第1点所示,分页mem是通过“特定于上下文”的页表访问的

当驱动程序在其他线程上下文中运行时…即。页表条目指向与phy相关的线程。mem,那么驾驶员如何访问他的分页内存

PS:我是内核编程的新手。不要生气。

使用的概念是“用户/内核地址空间分割”。每个进程地址空间被分为一个较低的部分(通常为2GB),该部分在用户模式下可供进程访问,并且每个进程的地址空间不同,而一个较高的部分(剩余地址空间)仅在内核模式下可供访问,并且每个进程的地址空间相同


当驱动程序分配分页内存时,它被分配在地址空间分割的内核端,因此无论在同一时间加载哪个进程页表,内核代码都可以看到它(因为这部分地址空间对每个进程的映射方式相同).

需要注意的要点是,所有线程都具有相同的内核内存映射。 因此,线程之间的上下文切换对顶级2GB虚拟内存没有(几乎)任何影响