在windows下应用程序对端口的读写受到了限制。这是因为应用层程序运行在CPU的Ring3,在x86结构下,ring3对port的访问权限受到限制。。而在驱动所运行的核心层,他拥有访问系统资源的权限。
Winio驱动程序通过使用内核模式下设备驱动程序和其它一些底层编程技巧绕过 Windows 安全保护机制,允许32位 Windows 程序直接对 I/O 口进行操作。它是代码开源的工具,Yariv Kaplan 的主页: 。
Winio实际调用了函数Ke386IoSetAccessProcess来打开了对io端口的访问限制,这样应用层对io端口的访问就不会导致异常了。实际上在驱动层有函数可以直接访问端口READ_PORT_BUFFER_UCHAR,WRITE_PORT_BUFFER_UCHAR,这几个函数可以在驱动层直接读写端口。
Winio对物理内存的映射,实际打开了windows的内存驱动,map内存的section到线性地址,实际上MmMapIoSpace可以把物理地址转换为线性地址。
所以实现winio的功能可以通过读写端口宏,和MmMapIoSpace来完成端口的读写和物理内存的读写。
上层应用即动态库用IOCTRL码来跟驱动通信。
附件自己完成的驱动和应用程序工具。
|
文件: |
hw_release_0.1.rar |
大小: |
649KB |
下载: |
下载 | |
阅读(3269) | 评论(0) | 转发(0) |