欢迎来到天天文库
浏览记录
ID:36012222
大小:71.50 KB
页数:17页
时间:2019-04-29
《windows驱动编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、WDM驱动程序开发之读写设备寄存器:KIoRange类2009-11-0914:05WDM驱动程序开发之读写设备寄存器:KIoRange类收藏KIoRange类:一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/Ocycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIoRange是KPeripher
2、alAddress类的派生类。 一旦映射关系建立起来,驱动程序就用KIoRange类的成员函数去控制设备的I/O寄存器。这个类提供了8位、16位和32位I/O访问控制的函数。这些函数是以内联(in-line)函数方式来使用的,它们调用系统内相应的宏来产生依赖于平台的代码。 对I/O位置(location)进行访问的另一种备选方案是创建一个KIoRegister的实例。这要通过取得一个KIoRange对象的数组元素来实现。 为了访问一系列外围总线内存空间的地址,需要用KMemoryRange类。二、MemberFunctions1、KIoR
3、ange-Constructor(4forms) 构造函数【函数原型】FORM1:KIoRange(void);FORM2:(NTDDKOnly)KIoRange( INTERFACE_TYPEIntfType, ULONGBusNumber, ULONGLONGBaseBusAddress, ULONGCount, BOOLEANMapToSystemVirtual=TRUE);FORM3(WDM):KIoRange( ULONGLONGCpuPhysicalAddress, BOOLEANInCpuIoSpace, ULONG
4、Count, BOOLEANMapToSystemVirtual=TRUE);FORM4(WDM):(NOTE:ThisformisdeprecatedasofDriverStudioversion2.0.)KIoRange( PCM_RESOURCE_LISTpTranslatedResourceList, ULONGOrdinal=0, BOOLEANMapToSystemVirtual=TRUE);FORM5(WDM):KIoRange( PCM_RESOURCE_LISTpTranslatedResourceList, PCM_R
5、ESOURCE_LISTpRawResourceList, ULONGOrdinal=0, BOOLEANMapToSystemVirtual=TRUE);【Parameters】 IntfType 指定总线类型。列举如下:Internal,Isa,Eisa,MicroChannel,TurboChannel,PCIBus。 BusNumber 一个表示总线的整数。这种与IntfType联合起来的表示方法当一个系统上有多条相同类型总线的时候是有意义的。这些数以0为对照并由系统分配。
6、 BaseBusAddress 被构造的对象所映射到的地址区域的首地址。 Count 以字节计数的地址区域大小。 MapToSystemVirtual 一个布尔值,用来指明构造函数是否要创建一个到系统非分页内存地址的映射。 CpuPhysicalAddress CPU总线上的物理地址或被翻译好的外围地址。 InCpuIoSpace 如果I/O范围在CPU总线的I/O空间则为TRUE,否则为FALSE。细节参
7、看KResourceAssignment::Flags。 pTranslatedResourceList 指向一个在KPnpDevice::OnStartDevice中可用的已翻译的资源列表的指针。可以通过KIrp::TranslatedResources获得。 pRawResourceList 指向一个在KPnpDevice::OnStartDevice中可用的原始资源列表的指针。可以通过KIrp::AllocatedResources获得。 Ordinal 序号。从pTr
8、anslatedResourceList指向的资源列表中指定一个特殊的端口资源。0表示第一个端口,1表示第二
此文档下载收益归作者所有