在此种情况下,系统内核(kernel32)必须面对一个困难的选择。从应用程序的角度来看,每一个进程有自己的模块数组是不错,但从内核的角度来看,单一模块数组比较容易达到代码和资源的共享。只要有一个新的进程开始执行,或一个新的dll被加载。内核就可以快速的检查唯一的全局性模块数组,看看那个exe或dll是否已经加载,如果是,内核就简单的增加其引用计数。如果不是,内核才需将其加载到内存中以生成一个新的模块。
内核(kernel32)利用两个结构体来维护一个全局性模块,并且使它看起来好像每个进程都有自己的一个模块链表。第一个结构体是imte(interneal module table entry),第二个结构体是modref。
补充:在windows 2000下的一些不同之处
本文关键:Windows 95 System Programming SECRENTS学习笔记(一)