Windows XP驱动程序编写方法.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 3)直接对端口寄存器读写 DriverStudio提供了KIoRange类来将外部总线的I/O地址空间范围映射到处理器总线的地址空间范围。 该类的成员函数主要有 KIoRange 构造函数 (4 种格式) Initialize 初始化和重新初始化一个实例 (3种格式) ~KIoRange 析构函数 Invalidate 从已初始化状态删除该对象 IsValid 测试该对象是否已经初始化 inb 读一个或多个字节 (2 种形式) Outb 写一个或多个字节 (2 种形式) Inw 读一个或多个字 (2 种形式) Outw 写一个或多个字 (2 种形式) ind 读一个或多个双字 (2 种形式) outd 写一个或多个双字 (2 种形式) * KIoRange::KIoRange(只介绍WDM形式) FORM 3 (WDM): KIoRange( ?? ULONGLONG CpuPhysicalAddress, //转换成外围设备地址的CPU总线上的物理地址 ?? BOOLEAN InCpuIoSpace, //如果IO范围是在CPU总线的IO空间中为TRUE,否则为FALSE ?? ULONG Count, //以字节计的区域的大小 ?? BOOLEAN MapToSystemVirtual =TRUE//指定是否需要构造函数创建一个非页系统空间的地址空间映射,如果驱动程序读写设备中的数据,就需要这种映射 ); FORM 4 (WDM): (注意: 这种形式不被 DriverStudio 2.0支持。) KIoRange( ?? PCM_RESOURCE_LIST pTranslatedResourceList, //指向转换资源表的指针 ?? ULONG Ordinal=0, //指定pTranslatedResourceList指向的资源列表中的一个特殊端口资源 ?? BOOLEAN MapToSystemVirtual =TRUE ); FORM 5 (WDM): KIoRange( ?? PCM_RESOURCE_LIST pTranslatedResourceList, //可通过KIrp::TranslatedResources获得 ?? PCM_RESOURCE_LIST pRawResourceList, //指向原始资源表的指针 ?? ULONG Ordinal=0, ?? BOOLEAN MapToSystemVirtual =TRUE );构造 KIoRange类。 * KIoRange::Initialize (只介绍WDM形式) FORM 2 (WDM): NTSTATUS Initialize( ?? ULONGLONG CpuPhysicalAddress, ?? BOOLEAN InCpuIoSpace, ?? ULONG Count, ?? BOOLEAN MapToSystemVirtual=TRUE ); FORM 3 (WDM): (注意: 这种形式不被 DriverStudio 2.0支持。) NTSTATUS Initialize( ?? PCM_RESOURCE_LIST pTranslatedResourceList, ?? ULONG Ordinal=0, ?? BOOLEAN MapToSystemVirtual =TRUE ); FORM 4 (WDM): Initialize( ?? PCM_RESOURCE_LIST pTranslatedResourceList, ?? PCM_RESOURCE_LIST pRawResourceList, ?? ULONG Ordinal=0, ?? BOOLEAN MapToSystemVirtual =TRUE ); 初始化或重新初始化KIoRange的实例。 * KIoRange::inb FORM 1: UCHAR inb( ULONG ByteOffset ); FORM 2: VOID inb( ?? ULONG ByteOffset, ?? PUCHAR Buffer, ?? ULONG Count ); 从映射空间读一个或多个字节。 * KIoRange::outb FORM 1: VOID outb( ?? ULONG ByteOffset,//以字节为单位的目标位置到IO空间开始位置的偏移值 ? UCHAR Data //要写的一个字节数据 ); FORM 2: VOID outb( ?? ULONG ByteOffset, ?? PUCHAR Buffer,//指向包含要写数据的缓冲的指针 ? ULONG Count //缓冲中要写数据的字节数 ); 写一个或多

文档评论(0)

xx88606 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档