访问用户空间内存

驱动程序无法通过用户模式虚拟地址直接访问内存,除非它在导致驱动程序当前 I/O 操作的用户模式线程的上下文中运行,并且它正在使用该线程的虚拟地址。

只有最高级别的驱动程序(如 FSD)才能确保在此类用户模式线程的上下文中调用其调度例程。 在为较低驱动程序设置 IRP 之前,最高级别的驱动程序可以调用 MmProbeAndLockPages 来锁定用户缓冲区。

缓冲 I/O 或直接 I/O 设置设备对象的最低级别和中间驱动程序可以依赖 I/O 管理器或最高级别的驱动程序来传递对锁定的用户缓冲区或 IRP 中的系统空间缓冲区的有效访问。