欢迎来到天天文库
浏览记录
ID:47175707
大小:50.50 KB
页数:4页
时间:2019-08-16
《中间层驱动工作原理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、中间层驱动工作原理作者:noble联系方式:noble_shi@21cn.com本文如有错误,请联系作者,谢谢。(1)注册表常识:1)、设备数据库所在的注册表健值为:HKLMSYSTEMCurrentControlSetEnumENUM子项中是一个设备数据库,在数据库存放计算机中所有安装的,并且被系统认识到的设备。所有的用户(包括管理员)都不能更改ENUM项的内容。这是为了保护操作系统和安装的设备的完整性。为了更改设备的设置,应该使用“设备管理器”。为了在设备管理器中现实隐藏的,非即插即用的,以及没有连接到计算机上的所有设备,你应该首先在命令解释器中敲入命令setD
2、EVMGR_SHOW_NONPRESENT_DEVICES=1,然后启动设备管理器,就可以在设备管理器中删除和重新配置这些设备了。2)、硬件设备类所在的注册表健值为:HKLMSYSTEMCurrentControlSetControlClassClass项下存放硬件设备类的配置信息。在Class项下的每个子项都代表一个设备类,子项的名称使用“唯一全局标识符(GUIS)”,这些标识符存放该设备类的配置信息。在每个类标识符下,还会有以4位数命名的子项,他们代表该设备类里的具体设备,其他的配置数据只应用于该具体设备。如网卡的设备类是{4D36E972-E325-11CE
3、-BFC1-08002BE10318},并假定我们网卡对应的4为数命名子项名为0005。其中HKLMSYSTEMCurrentControlSetClass{4D36E972-E325-11CE-BFC1-08002BE10318} 005Linkage中:Export:代表该设备在设备名字空间输出的设备名字。RootDevice:代表当前设备的GUID。中间层驱动这里有两个GUID,第一个是自己的GUID,第二个是该中间层驱动绑定的下层MINIPORT的GUID。UpperBind:代表上层绑定它的NDIS协议驱动或NDIS中间层驱动。当某个协议驱动绑定该M
4、INIPORT设备时,则这个协议驱动的名字必须出现在UpperBind健值的字符串中,否则不能进行绑定。也就是说,UpperBind健值的字符串决定了那个协议驱动(当然也包括中间层驱动注册的协议)和当前的MINIPORT设备绑定,即,它决定了NDIS的上下层绑定关系。注:一般添加中间层驱动后,中间层驱动只插入到真是网卡和相应协议中间,不会插入到虚拟网卡(如安装虚拟机后虚拟出来的网卡设备)和相应协议中间。3)、驱动程序所在的注册表健值为:HKLMSYSTEMCurrentControlSetServicesENUM子项通常如果某个服务下存在ENUM子项,表明该服务是用来
5、控制某个设备或者设备交互的,它的下面存放该设备的实例。用户不要去试图修改该子项的内容,因为每次系统启动时,都会重写该子项的内容。LINKAGE子项值项Bind存放该协议所在绑定栈的最低层小端口设备实例(即MINIPORT)。值项Export存放该服务必须访问的对象,该对象必须已经安装在系统中,并且该服务能够使用。值项Route指定子项Linkage从那里获取绑定数据。ParametersAdapters子项这里,我们只解释中间层驱动中该子项的意义。为此,我们假设当前我们讨论的HKLMSYSTEMCurrentControlSetServicesXXXX中的XXX
6、X为中间层驱动。对于中间层驱动,该子项下含有一个子项,是以我们当前中间层驱动绑定的下层MINIPORT设备的GUID命名的,在我的系统中,健值如下:{102454C2-9DB3-42A1-B4CF-6A8B67A516C0}在{102454C2-9DB3-42A1-B4CF-6A8B67A516C0}子项有个健,名称为UpperBindings,该健的健值是当前中间层驱动的MINIPORT设备名称,在我的系统中为如下健值:Device{5BF5A311-13E4-4746-8865-339DDD6C73AF}(2)中间层驱动在我们的函数NDIS_PROTOCOL_CHA
7、RACTERISTICS->BindAdapterHandler()中,会调用一系列函数(如NdisOpenProtocolConfiguration、NdisReadConfiguration)来访问注册表,其实都是访问ParametersAdapters{102454C2-9DB3-42A1-B4CF-6A8B67A516C0}子项。注意,函数NDIS_PROTOCOL_CHARACTERISTICS->BindAdapterHandler()的倒数第二个参数是SystemSpecific1,如果我们安装的
此文档下载收益归作者所有