欢迎来到天天文库
浏览记录
ID:37712194
大小:19.50 KB
页数:4页
时间:2019-05-29
《usb加载详细过程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、【转】 usb加载详细过程(zz)2010-06-2021:00转载自 分享最终编辑 pulerain当你的u盘插入以后. usbhub能检测到有某个设备连接进来(usb某根数据线的电平超过最小输入电压2.5us).通知windows有一新设备连接进来了. 然后pnpmanager发送一系列的pnpirp到这个新设备 比如querycaps,queryid.queryresource,queryresourcereq等等. 和我们讨论有关的就是queryid了. pnpmanager首先query的是deviceid.目的是用来定位所谓的devi
2、cekey 他位于currentcontrolset\enum下面. usbhub为其返回的id格式如下 USB\VID_xxxx&PID_xxxx当然了,这两个数来自于devicedescriptor pnpmanager接着queryinstanceid.根据需要生成一个instanceidstring并附加到deviceid后面形成如下的string.也就是所谓的某个device的instancepath USB\VID_xxxx&PID_xxxx\xxxx 然后用他作为subkey的名字去打开 LOCAL_MACHINE\sys
3、tem\CurrentControlSet\Enum\下的某个key 比如我的u盘的instancepath是 USB\Vid_0c45&Pid_1060\5&1489a85&0&1 对应的devicekey就是 LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\Vid_0c45&Pid_1060\5&1489a85&0&1 如果这个key已经存在.pnpmanager则认为是一个以前就安装好驱动程序的设备.如果这个key不存在,pnpmanager则认为是一个新设备,出现发现新
4、硬件的提示.通知usermode要为这个设备选择一个驱动. 先看key存在的情况. pnpmanager会query他的resource和resourcerequirement.并且查询适当的arbiter和translator交给他们作仲裁.并分配适当的资源.资源分配完成了以后.pnpmanager开始start这个新的设备. 首先是为其加载functiondevice和filterdevice. functiondriver是由devicekey下面service字段指出来的 windows读取他.用他作为subkey的name去 curre
5、ntcontrolset\Services下面打开这个key 按照需要加载其driver的sys文件,创建driverobject 而对于filter则有好些种 一类是专属于这个device的,另外一类是属于则device所在的class的 专属device的lower跟upperfilters就在devicekey下面 而class的filter则是在classkey的下面 在devicekey下面有一个classguid的value,pnpmanager读取他 作为subkey 到 currentcontrolset\control\c
6、lass下面去打开key 然后读取lower跟upperfilters.. 当然这些filters本身的driver也会被加载进来 然后把他们的driverobjects放到一个数组里面,先后顺序是 LowerDeviceFilters LowerClassFilters DeviceService UpperDeviceFilters UpperClassFilters 从上到下逐一调用其AddDevice函数 这样就算初步搭建完了这个新设备的devicestack 接下来就会有其他的pnpirp发送. 比如filterresourcerequ
7、irement,querycaps,startdevice等等 然后pnpmanager为这个新搭建的devicestack发送querybusrelations的irp,如果这个新的设备是个busdriver的话,他也会按照通知windows有新的设备连接在其上面.windows再重复以上的步骤. 回过来.如果instancekey不存在.windows则为其创建这个instancekey并通知usermode,usermode的pnpmanager则为其搜索所有可能的inf文件组成一个列表,然后从里面选择一个最佳匹配的inf为其安装驱动程序.
8、 选择的依据就是queryid返回的string.包括 deviceid hardwareid compatibleid inf文件在其
此文档下载收益归作者所有