文件系统驱动编程基础篇之7

文件系统驱动编程基础篇之7

ID:26231327

大小:206.50 KB

页数:11页

时间:2018-11-25

文件系统驱动编程基础篇之7_第1页
文件系统驱动编程基础篇之7_第2页
文件系统驱动编程基础篇之7_第3页
文件系统驱动编程基础篇之7_第4页
文件系统驱动编程基础篇之7_第5页
资源描述:

《文件系统驱动编程基础篇之7》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、文件系统驱动编程基础篇之7——端口读写关键字:文件系统驱动编程,端口读写作者:wskjuf更新:2008-10-0622:14:58浏览:10976文件系统驱动编程基础篇之七——端口读写一、前略本系列文章为业余编程爱好者而写,仅仅作为初学者的一个借鉴,真正的精华存在于参考资料*中。知识的积累将经历从薄到厚,再从厚到薄的反复过程,为了打下牢固的基础,请读者务必在阅读本文的基础上花费必要的时间完成参考资料。笔者的实践环境为:硬件:P35Motherboard&ICH9chip,PentiumDualCpuE21601.8g,DDR21g软件:WindowsXP2、VS2

2、005、VisualAssistX、DriverStudio3.2、MICROSOFT.WINDOWS.SERVER.V2003.IFS.DDK、Windbg6.8.0004.0,请安装好用于调试的虚拟机并配置好调试环境。参考资料*:1.《ProgrammingtheMicrosoftWindowsdrivermodel》第一版(当前阶段主要阅读资料,在先前的基础上,本次需要完成前八章)2.《WindowsNTFileSystemInternals-ADevelopersGuide》(资料1理解后可阅读,为后续章节做准备)3.《OSRWhitePapers》4、《I

3、ntel64andIA-32ArchitecturesSoftwareDevelopersManualVolume3A/BSystemProgrammingGuide》5.WinXXX部分源代码…6.《KernelDebuggingwithWinDbg》(随WinDbg软件附带的文档)阅读基础:了解计算机结构体系、掌握用户模式下常用API调用、了解常用汇编指令。请从现在开始的一年时间里阅读50万字以上的驱动编程外文资料,彻底突破外文关。本章目的:初步掌握硬件驱动编程的基础知识,学习使用Windbg调试。初次阅读代码量在一万行以上的驱动程序。二、问题的提出xp下直接读

4、写端口会发生什么事情呢?一个简单的测试程序如下:intmain(intargc,char*argv[]){charresult;asm{moval,0x10out0x70,alinal,0x71movresult,al}printf("%X",result);return0;}运行后发现程序弹出了异常,无法执行out指令,给出的提示为:这是早已预料的结果。笔者搜索了一下,找到了《DirectPortIOandWindowsNT》,欣欣然之下禁不住想让大家知道原来“不需要”写驱动也可以访问端口了。它究竟是何方神圣?原来这是一种称之为iopm的方法,它涉及了CPU硬件理

5、论里关于TS段的基础知识:通过修改I/O映射表,用户模式下的进程就具有了存取端口的权限。问题是如何修改I/O映射表?阅读了porttalk和winio的源代码后,发现所谓的iopm还是需要通过驱动代码修改映射表,此外你还需要修改当前进程的映射表偏移地址。当我们费力的写好近千行代码,换来的好处就是真的可以在用户模式下以较快的速度存取端口了。欣欣然的你不妨用文初给出的测试程序来检查一下成果:如果把驱动编程想得这么的简单,那你就有些过于乐观了。现在尝试另一个端口,比如串口的0x3f8,看看有什么奇怪的事情发生?这次读出了0xff,那么0x3f9呢,还是0xff,一直读完串

6、口的所有端口,结果都是0xff。假如我们首先用CreateFile来打开串口,怎么读出的值不再是0xff了,如果关闭了串口再来读一读,结果又是0xff了。Google或baidu后,发现串口原理的资料很少,换个思路来查,查询串口的主要芯片——从8250一直搜索到16550A,这下果然搜出了有价值的资料,如《InterfacingtheSerialRS232Port》,《串行输入输出接口》,《常用的输入输出接口芯片》,《UART内部寄存器对应端口及用途》等。但这些资料只说明了一个问题——很久很久以前,在DOS下是如何发送串口指令的——却还是没有解决Windows下的问

7、题。让我们再换一下思路。从DevView里看到串口驱动的基本情况,原来串口的PDO是ACPI。阅读《AdvancedConfigurationandPowerInterfaceSpecification》,可知ACPI是微软和几个厂家制定的协议,不由得想起使用WINPE启动的时候选择了ACPI,结果机子一次次的重启,本杂牌机无论从外观还是认证标签上看极象兼容ACPI,但假货毕竟是假货。折腾了半天后,因我们的目的不在于如何写ACPI驱动,故这个问题的答案即使和它有关,也请暂时绕过(实践会证明,很多问题都是冤家路窄,避是避不过的^_^。对ACPI调用IoCallDr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。