From: "lu0" Subject: Re: 请问 Win9x 的进程私有空间为何一定是从4M开始? Date: Friday, February 11, 2000 10:15 PM "ZAX" wrote in message news:38a3df1b@NEWS.webking.com.cn... > 我知道这是要与Win16兼容,但确实是必要的么?放在2G~3G中不行么? > NT是怎样解决呢? > > 有必要.只有将OS代码放置于APP不能修改的页里才能保证OS的完整性.从WIN3.X时代开 始,就已经将地址虚拟化了.当时所有的WIN16代码段,数据段的虚拟地址都在80000000H 以上.4M以下则是保护数据区.操作系统代码则放在C0000000H上.这已经成为了 UNDOCUMENTED定规.做为兼容的保证,9X必须和3.X使用同样的虚拟地址,否则大量的VXD 就必须改写.包括VMM等.现在的VMM只不过在3.X的VMM上加了百来个VXD SERVICE而已. NT本身并不考虑是否需要改写VMM等OS组件,因为它本身就是新的,所以最初的NT限制APP 地址空间为1M-2G.同时,由于WIN16通过段选择子来获取地址,虚拟地址转换对他来说是 透明的,兼容性没有很大问题.而OS通过虚拟地址的BIT31区分地址是属于KERNEL还是 USER MODE. 目前从NT SERVER ENTERPRISE VERSION SERVICE PACK3开始,应用程序开始可以使用 2-3G地址.只需要启动时加3GB参数,而且应用程序必须能意识到2-3G可用就可.这是为了 使数据库应用更方便. From: "lu0" Subject: Re: Win9x中的 Int30 的具体是什么? Date: Friday, February 11, 2000 11:10 PM "ZAX" wrote in message news:38a3df5e@NEWS.webking.com.cn... > 听说好像是用于从Ring3转换到Ring0,是不是呀? > 能不能给我具体讲解一下呢? > > 9X里的INT30乃是RING3跳转到RING0的指令.这个指令不是到处可以发出的.这个INT30必 须从段3B发出.通常情况下,如果VXD在加载时有参数指明自己有PM入口,系统会提供一个 INT30的入口,提供RING3接口供调用.RING3通过INT2F获取VXD接口.具体接口可参见DDK. 大量的VXD通过Allocate_PM_Call_Back注册INT30用于提供RING3服务.这些例程则成为 VXD对RING3的私有接口.只有知道改接口协议的APP才能正确调用. 各个INT30的接口本身是没有文档的,而且根据编程实际情况,也不需要文档.因为实际上 APP根本不知道INT30的存在.因为APP获得的乃是一个FAR CALL地址. -- Best Regards, Lu Lin For more information, please visit Inside Programming http://lu0.126.com lu0@126.com