PBYTE MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle)
将一块物理空间映射到一个32位应用程序的线性地址空间。
举例如下:
PBYTE pbLinAddr;
HANDLE PhysicalMemoryHandle;
pbLinAddr = MapPhysToLin(0xA0000, 65536, &PhysicalMemoryHandle);
这段代码将0XA0000-0XAFFFF地址空间映射到应用程序的线性地址空间。返回值是对应物理地址空间的线性地址。如果失败则返回NULL。
参数:
pbPhysAddr - 指向物理地址的指针
dwPhysSize - 映射的内存大小,以字节位单位
pPhysicalMemoryHandle - 指向一个接收物理地址段的句柄,成功则返回句柄,这个句柄在调用UnmapPhysicalMemory函数时用作第一个参数
----------------------------------------------------------------------------
bool UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr)
取消地址映射
Windows 9x 应用程序不需要调用这个函数
参数:
PhysicalMemoryHandle - 物理地址空间句柄
pbLinAddr - 线性地址
----------------------------------------------------------------------------
bool GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
从给定的内存地址得到一个双字数据
参数:
pbPhysAddr - 指向给定的物理内存地址
pdwPhysVal - 指向一个从给定物理地址获取双字数据的变量
成功返回非0.
失败则返回0.
----------------------------------------------------------------------------
bool SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
将一个双字数据写到规定的物理地址。
参数:
pbPhysAddr - 指向物理地址的指针
dwPhysVal - 要写到物理地址的数据
成功返回非0.
失败返回0.
----------------------------------------------------------------------------
用户注意
----------------------------------------------------------------------------
一般情况下,对于I/O操作不需调用下述函数。
PBYTE MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
bool UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
bool GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
bool SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
----------------------------------------------------------------------------
----------------------------------------------------------------------------
C++用户注意
----------------------------------------------------------------------------
为了在一个32位的C++应用程序中使用winio.dll动态连接库,请参照下述两步:
1. 将winio.lib、winio.dll和winio.sys拷贝到你的执行程序所在的目录下。
2. 将winio.h头文件加入到工程中。
3. 将winio.lib库文件加入到工程中。