当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>Windows NT下实现对I/O地址的拜候</b>[VC/C++编程]

赞助商链接



  本文“<b>Windows NT下实现对I/O地址的拜候</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

Windows NT 操作系统设置的进程情势会使运行在此中的利用程序拜候I/O地址的指令惹起保护性的失利.这使得利用程序需求附以一个设备驱动程序举行I/O操作.设备驱动程序运行在内核情势,这使得在这种状况的中运行的进程可以履行I/O操作.

---- Windows 95/98 是仅为 Intel 范例机械计划的,没有额外复杂的I/O需求,而Windows NT 被计划成可以在差别机械机构上举行移植.这使得Windows NT 的系统情势要求驱动程序的编写者要考虑一台机械大概有多种范例的总线,这大概需求在总线之间传送地址.这种情势还要辨别I/O空间和内存空间.在多总线的机械中每一总线可以既支持内存又支持I/O循环.

---- 按照定义,I/O存放器大概端口拜候是通过I/O循环实现的.但是,在一些系统中外部总线的I/O空间可以被映像到进程内存空间.硬件抽象层(Hardware Abstract Layer)决意这些.要拜候I/O存放器,驱动程序编写者必须知道存放器在那一总线,它的I/O空间地址在那条总线.一条总线是由其接口类行 (如 ISA 、PCI 等)和编号(从零开始)决意的.

---- 下面是一个假象设备拜候I/O的例子,接口范例:ISA 编号 0 地址 0xE700.设备描写以下: Offset Size Usage 0 1 Command register 1 1 Status register 2 2 Word data register 4 4 Dword data register

---- 用开辟NT 设备驱动程序的工具包DriverDorks 可以用以下 步骤拜候设备:

---- 成立一个KIoRange的对象映像设备存放器.

KIoRange DeviceIos; Status = DevceIos.Initialize(

Isa, // 总线范例

0, // 总线号

0xE700, // 总线地址

8, // 设备数

TRUE // 映像到系统空间(假如端口是内存映像的)

);

if(NT_SUCCESS(status)) //成立成功

---- 可以用KIoRange 的成员函数拜候存放器:

//存放器偏移量

#define COMMAND 0

#define STATUS 1

#define WDATA 2

#define DDATA 3

//读状况存放器

UCHAR DeviceStatus = DeviceIos.inb(STATUS);

//写号令存放器

DeviceIos.outb(COMMAND,CMD_RESET);

//写20个字到端口

DeviceIos.outw(WDATA,buffer,20);

---- 别的也可以成立KIoRegister 的对象来拜候设备:

KIoRegister CommandReg = DeviceIos[COMMAND];

KIoRegister StatusReg = DeviceIos[STATUS];

CommandRge=(UCHAR)RESET; //写 RESET号令

UCHAR status=StatusReg; //读状况存放器

假如在同一函数中频繁拜候存放器用KioRegiser 比用KIoRange 的成员函数的性能好一些.无论若何,数据范例必须精确(UCHAR,USHORT,ULONG),这些决意了到总线上数据的实际大小.


  以上是“<b>Windows NT下实现对I/O地址的拜候</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .