用户模式下运行的代码可以访问用户空间,但不能访问系统空间。 此限制可防止用户模式代码读取或更改受保护的操作系统数据结构。 内核模式下运行的代码既可以访问用户空间,也可以访问系统空间。 即,内核模式下运行的代码可以访问系统空间和当前用户模式进程的虚拟地址空间。内核模式下运行的驱动程序必须在直接从用户空间地址中读取或写入这些地址时非常小心。 此方案说明了原因。
用户模式程序发起从设备读取某些数据的请求。 程序提供缓冲区的起始地址以接收数据。
内核模式下运行的设备驱动程序例程启动读取操作并将控制权返回给其调用程序。
稍后,设备中断了当前正在运行的任何线程以显示读取操作完成。 中断由此任意线程(属于任意进程)上运行的内核模式驱动程序例程进行处理。
此时,驱动程序不得将数据写入用户模式程序在步骤 1 中提供的开始地址。 此地址位于发起请求的进程的虚拟地址空间中,该进程很可能与当前进程不同。