标题：winio
介绍
  winio文件图New stuff at internals.com 
Here is the cool stuff added to the site: 
WinIo - This library allows direct I/O port and physical memory access under Windows 9x/NT/2000 and XP. Version 2.0 provides faster I/O port access, better memory mapping support and can be used from non-administrative accounts under Windows NT/2000 and XP. 
APISpy32 - Version 3.0 of the most sophisticated API spying utility is here. With its redesigned interception engine, APISpy32 now offers better accuracy and is more reliable and powerful than ever ! 
Internals.com has a new mailing list. Join now to get free programming tips, source code examples and undocumented system-level information directly to your mailbox. 
A comprehensive article that presents the techniques used by API spying utilities. 
MailControl - The personal e-mail firewall that protects your system from hostile viruses and trojans. 
ProcSpy32 - A VB utility that monitors the execution and termination of processes under Windows 9x. 
NtDriverList - A utility which uses an undocumented API to obtain a list of loaded drivers under NT. 
StickyApp32 - A visual basic application which fools the Windows NT task manager. 
What is internals.com ? 
This site's purpose is to reveal undocumented aspects of Windows 9x/NT/2000/ME and explore the inner workings of these operating systems. Since information regarding these issues is extremely scarce, many programmers are not familiar with these topics and have to settle with the formal Windows documentation. By providing free utilities and comprehensive tutorials, internals.com attempts to shed some light on these issues and help programmers achieve more in less time. Internals.com will continue to evolve in the future until it covers all key aspects of low-level programming. This includes subjects such as: device driver development, PC internal architecture, undocumented file formats and more.
使用
WinIO程序库允许在32位的Windows应用程序中直接对I/O端口和物理内存进行存取操作。通过使用一种内核模式的设备驱动器和其它几种底层编程技巧，它绕过了Windows系统的保护机制。
工作原理
WinNT/2000/XP下，WinIO函数库只允许被具有管理者权限的应用程序调用。如果使用者不是以管理者的身份进入的，则WinIO.DLL不能够被安装，也不能激活WinIO驱动器。通过在管理者权限下安装驱动器软件就可以克服这种限制。然而，在这种情况下，ShutdownWinIo函数不能在应用程序结束之前被调用，因为该函数将WinIO驱动程序从系统注册表中删除。
函数详解
该函数库提供8个函数功能调用：
bool _stdcall InitializeWinIo();
本函数初始化WioIO函数库。
必须在调用所有其它功能函数之前调用本函数。
如果函数调用成功，返回值为非零值。
如果调用失败，则返回值为0。 
void _stdcall ShutdownWinIo();
本函数在内存中清除WinIO库
本函数必须在中止应用函数之前或者不再需要WinIO库时调用，
bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
使用此函数从一个输入或输出端口读取一个字节/字/双字数据。
参数：
wPortAddr – 输入输出端口地址
pdwPortVal – 指向双字变量的指针，接收从端口得到的数据。
bSize – 需要读的字节数，可以是1 (BYTE), 2 (WORD) or 4 (DWORD).
如果调用成功，则返回非零值。
如果函数调用失败，则函数返回值为零。 
bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
使用本函数将一个字节/字/双字的数据写入输入或输出接口。
参数：
wPortAddr – 输入输出口地址
dwPortVal – 要写入口的数据
bSize – 要写的数据个数，可以是 1 (BYTE), 2 (WORD) or 4 (DWORD).
如果调用成功，则返回非零值。
如果函数调用失败，则函数返回值为零。 
PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle)
使用此函数将物理内存的一部分映射到一个32位应用程序的线性地址空间。 
下面是一个例子： 
PBYTE pbLinAddr;
HANDLE PhysicalMemoryHandle;
pbLinAddr = MapPhysToLin(0xA0000, 65536, &PhysicalMemoryHandle);
该函数将把物理地址范围为0xA0000 - 0xAFFFF的地址空间映射到与应用程序对应的线性地址空间。 返回值为一个与物理地址0xA0000相关的线性地址。如果出现错误，则返回值为NULL。
参数：
pbPhysAddr – 指向物理地址的指针
dwPhysSize – 需要映射的字节数
pPhysicalMemoryHandle – 变量指针，如果调用成功，负责接收物理内存句柄。随后本句柄在调用UnmapPhysicalMemory函数时作为其第一个参数。
bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE
pbLinAddr)
使用本函数解除原先使用MapPhysToLin函数映射的一段线性物理内存区域，该区域被映射到应用程序所属的线性地址空间。
Windows 9x 应用程序不需要调用此函数。
参数：
PhysicalMemoryHandle – 物理内存区域所属的句柄，此参数由对MapPhysToLin函数的调用返回。
pbLinAddr – MapPhysToLin函数调用返回的线性地址。
bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
从指定的物理地址读取一个双字数据。
参数：
pbPhysAddr – 指向物理地址的指针。
pdwPhysVal – 指向一个双字变量的指针，接收从物理内存中传来的数据。
如果此函数调用成功，返回一个非零值。
如果函数调用失败，则返回一个零值。 
bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
将一个双字型数据写入指定的物理地址。
参数：
pbPhysAddr – 指向物理地址的指针。
pdwPhysVal – 指定待写入物理内存地址出的双字型数据。
如果此函数调用成功，返回一个非零值。
如果函数调用失败，则返回一个零值。