I/O Port Functions UDF
Windows 7 and x64-compatible!
This is a simple I/O (Input/Output) UDF for interacting with ports. The ability to write to ports was stripped from Windows with Vista+. While many do not miss this ability, there are some uses still in existence:
- Re-enable the internal PC Speaker - the good ol' "Beep" function can be restored using basic I/O
- PS/2 Keyboard Functions - Turn it off/on, mess with LED's, inject keys into the keyboard output stream - even thwart UAC prompts! =O
- Also work with Parallel, Serial (COM), PS/2 mouse, and miscellaneous ports that devices interface through using I/O operations
For some good lists of ports and programming, see:
Chapters from 'The Art of Assembly Language':
- 20: The PC Keyboards - Part One and Part Two
- 21: The PC Parallel Ports - Part One, Part Two, and Part Three
- 22: The PC Serial Ports - Part One and Part Two
- 23: The PC Video Display
- 24: The PC Game Adapter - Part One, Part Two, Part Three and Part Four
On the PS/2 Keyboard and PS/2 Mouse, some more links:
- 8042 Keyboard Controller
- 8042 Keyboard Commands & Responses
- Keyboard Controller Commands, Keyboard Commands and Keyboard Scancodes
- The PS/2 Mouse
The I/O DLL's, which will install the I/O drivers (they are embedded as a resource in the DLL), come from Phillip Gibbons. His webpage, where more information, and extra downloads are, is available here: InpOut32 and InpOutx64. Note: everything you need is already included in my UDF.
IOInstallx86 and IOInstallx64 are included to help with the install. Run these once to install the DLL's and drivers. (Administrator rights are required!)
In addition to the base _IOFunctions UDF, I've included _IOBeep, which is based on trancexx's _Beep function, and _IOKeyboardFunctions [PS/2 only*]. There are now three examples of the UDF usage included: IOBeepExample, IOCMOSReadExample (based on trancexx's CMOS code), and IOKeyboardExamples. If anyone else has more code suggestions, feel free to add to the thread.
*Update: Some BIOS's allow Legacy USB Port 64/60 Emulation, which may allow the _IOKeyboardFunctions to work for USB (non-PS/2) Keyboards, though this is untested thus far.
While I bundle the binaries with my code, remember they are not my own. However, they are released as freeware. To ensure proper credit goes where it belongs, I've included the Readme files from the download (linked above), as well as a link to the original page.
Ascend4nt's AutoIT Code License agreement
Screw silly licenses. Just make sure you remember the people you get free stuff from!
IOFunctions.zip 123.95KB 319 downloads
- Updated to use (and install) v22.214.171.124 of InpOut32 & InpOutx64
- Version check & compare before install
- Fixed links
- Tiny bug fixes
InpOut32 and InpOutx64 ChangeLog:
v126.96.36.199 New Build (20-Jan-2011):
- Added _stdcall to DlPortReadPortUshort, DlPortWritePortUshort, DlPortReadPortUlong, DlPortWritePortUlong to maintain compatibility with old DLPortIO driver.
v188.8.131.52 New Build (13-Jan-2011):
- Removed references to WinRing0 which was discontinued.
- Fixed uninitialized buffers & return from Inp32 > byte value!
v184.108.40.206 New Build (15-Aug-2010):
- Removed bool's from header (replaced with BOOL). This is to maintain compatibility with other DLL’s (DLPortIO etc.).
- Added _IOKeyboardFunctions UDF
- Added IOKeyboardExamples and IOCMOSReadExample (based on trancexx's CMOS code)
Edited by Ascend4nt, 11 July 2013 - 06:55 AM.