-
-
[己解决]windows UDMA传输框架,酬劳
-
发表于:
2016-8-5 13:11
7576
-
目前在写一个windows的udma传输框架,主要是应用在硬盘和系统之间传输。
目的如下:
用微软的api来实现的话,很多的错误是无法跳过的,因为他们底层没有考虑过出现问题的磁盘的复制的情况,当出现坏扇区的时候,api是没有能力跳过的。因此我想写一个自己的udma传输框架,通过硬件端口和ata指令来实现。
目前的问题:
1. 查了很多的资料,都是通过驱动里面的dma对象来构建。用allocatecommonbuffer来分配udma的空间。但是我想通过端口操作直接绕开驱动api,获得最直接控制权限,目前用的是MmAllocateContiguousMemory来获取内存分配,但是微软文档说不行,但是有的又说可以,我不知道是不是因为这个函数引起的我目前无法成功的问题。
但是最后发现PHY_ADDR里的数据没有任何改变。。。所以特此发布奖金,端口访问用的winio,我自己在里面加了一个allocate,ring3程序用的delphi写的。winio只完成底层的工作,其余的算法以及io都在ring3下完成。这样方便开发。
参考过一些开源的小系统的udma框架,流程是一样的。但是我这个就是不行。。。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!