如何理解WINDOWS
NT的WIN32拥有输入输出设备
作者:陆麟
转载请征得作者同意.
2000.10.07
我们经常能够看到这么一句话:WINDOWS NT的WIN32拥有输入输出设备,很显然,大部分的朋友并不理解这一句话,那么如何理解WINDOWS
NT的WIN32拥有输入输出设备呢?
当时是NT3.51,所有的GDI,USER服务都是通过LPC进行实现的。也就是说,如果一个APP发出了一个系统调用,例如,试图调用LineTo(),LineTo()会发出一个LPC调用来通知WIN32子系统--CSRSS.EXE,现在有一个划线的请求,你必须处理。然后,实际的画线是由WIN32子系统完成的。如果反编译GDI里的函数,所有的函数最终都进行了LPC调用。这就是NT3.51的实现。
这就是WINDOWS NT的WIN32拥有输入输出设备的由来。
经过一段时间的发展,MS最终发现每次都发出一个LPC调用并且需要一次进程CONTEXT切换的花费实在太大。在NT4.0中进行了改进,现在的实现是把GDI,USER的真正实现移动到KERNEL模式下,避免CONTEXT切换。把原来的LPC
CALL替换成SYSCALL。具体实现SYSCALL的部分就是现在的WIN32K.SYS。
WIN32子系统的功能已经减弱。但是,现在的说法仍然没有改变。WINDOWS NT的WIN32拥有输入输出设备。这些GUI
SYSCALL仍然是MS自己的内部接口。没有公开文档说明这些SYSCALL调用。