本资源提供WinIO驱动程序的下载及其完整源代码,并包含多个实例代码供学习参考。适合需要直接硬件访问的应用开发者研究使用。
WinIO是一个程序库,在32位的Windows应用程序里可以直接对输入输出端口及物理内存进行操作。通过使用内核模式设备驱动和其他底层编程技术,它可以绕过Windows系统的保护机制。
在Windows NT、2000或XP系统中,只有具有管理员权限的应用程序才能调用WinIO函数库,并且如果用户没有以管理员身份登录,则无法安装和激活WinIO驱动器。然而,在这种情况下,ShutdownWinIo函数不能被应用程序结束前调用,因为该函数会从注册表中移除WinIO驱动。
这个库提供以下八个功能:
- `bool _stdcall InitializeWinIo();`:初始化WinIO库。
- `void _stdcall ShutdownWinIo();`:在内存中清除WinIO库。必须在应用终止或不再需要使用库之前调用此函数。
- `bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);`:从输入输出端口读取字节、单词或双字数据。
- `bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);`:将一个字节、单词或双字的数据写入到指定的输入输出接口。
- `PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle)`:映射物理内存的一部分到32位应用程序的线性地址空间。
- `bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);`:解除先前通过MapPhysToLin函数映射的一段物理内存区域。
- `bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);`:从指定的物理地址读取一个双字数据。
- `bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);`:将一个双字值写入到指定的物理内存位置。