WINIO库详细介绍.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:3 大小:23KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

WINIO库详细介绍.doc

WINIO库详细介绍.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

由于Windows对系统底层操作采取了屏蔽的策略,因而对用户而言,系统变得更为安全,但这却给众多的硬件或者系统软件开发人员带来了不小的困难,因为只要应用中涉及到底层的操作,开发人员就不得不深入到Windows的内核去编写属于系统级的设备驱动程序。对并行口的读写操作就是如此,由于Windows对系统的保护,绝对不允许任何的直接I/O动作发生,所以必须带上*.dll、*.sys或*.vxd文件,这些文件用来让操作系统知道有一个特定的I/O可能会被调用。系统开机后,这些文件中的内容就会加载到内存中,一旦有对应的动作发生,就会引发I/O的实际动作。本文只是介绍并行口作为数字I/O口的使用,不在于介绍并行I/O口驱动的编写。故本文中直接使用由YarivKaplan编写的WinIo库,它有如下特点:WinIo库通过使用内核模式下设备驱动程序和其它一些底层编程技巧绕过Windows安全保せ疲市?32位Windows程序直接对I/O口进行操作。支持Windows9x、WindowsNT、Windows2000、WindowsXP环境;在WindowsNT/2000/XP下,允许非Administrator用户应用WinIo应用程序;不支持中断。注意事项:使用这个类代码时请确保不要与其它使用常规Win32调用操作并行端口的程序发生冲突。WinIo库在VC应用程序中的使用(WinIo库下载)为了在VC中能正常使用WinIo库,必须按以下步骤进行配置:(1):将WinIo.dll、WinIo.sys、WINIO.VXD三个文件放在程序可执行文件所在目录下;(2):将WinIo.lib添加到工程中,WinIo.lib及winio.h文件必须放在工程目录下;(3):在StdAfx.h头文件中加入#include"winio.h"语句;(4):调用InitializeWinIo函数初始化WinIo驱动库;(5):调用读写IO口的GetPortVal或SetPortVal函数;(6):调用ShutdownWinIo函数;在非管理员权限下运行,必须首先完成以下步骤:(1):将WinIo.dll、WinIo.sys、WINIO.VXD三个文件放在任一WinIo应用程序可执行文件所在目录下;(2):以管理员或其它具有管理员权限的用户身份登陆;(3):调用InstallWinIoDriver函数,第一个参数设置为WinIo.sys文件所在目录路径,第二个参数设置为false;(4):重新启动系统;(5):以普通用户身份登录,现在可以调用WinIo库函数;(6):当不再需要WinIo库时,可以再次以管理员身份或其它具有管理员权限的用户身份登陆系统,调用RemoveWinIoDriver卸载该库;WinIo库中几个函数说明:(1):初始化与终止bool_stdcallInitializeWinIo();void_stdcallShutdownWinIo();(2):安装与卸载bool_stdcallInstallWinIoDriver(PSTRpszWinIoDriverPath,boolIsDemandLoaded=false);bool_stdcallRemoveWinIoDriver();(3):读写I/O口bool_stdcallGetPortVal(WORDwPortAddr,PDWORDpdwPortVal,BYTEbSize);bool_stdcallSetPortVal(WORDwPortAddr,DWORDdwPortVal,BYTEbSize);GetPortVal函数从指定端口读取一个BYTE/WORD/DWORD类型的值;wPortAddr是指定一个端口地址值;pdwPortVal为指向一双字节型变量的指针,该变量存储从wPortAddr端口读取的值;bSize指定读取字节数,值可以为1,2或4。SetPortVal函数向指定端口写入一个BYTE/WORD/DWORD类型的值;除dwPortVal为输入参数,表示待写入外,其余个变量含义与GetPortVal相似。PC并行口数字输出的VC实现(示例工程下载)为了测试并行口的数字输出,可以准备12支LED发光二极管,将LED的阳极分别与数据端口引脚Pin2~Pin9和控制端口引脚Pin1、Pin14、Pin16、Pin17相连接;将LED的阴极连接在一起与并行口的归地引脚GND相连即可。在实际控制应用中不能这样连接,因为数据端口引脚、控制端口引脚输出的电流非常小,只有10mA左右,必须添加其它硬件电路。(1):数据端口数字输出的VC实现//获得数据端口地址WORDm_nport=(WORD)0x378;//获得要写入数据端口的值WriteValue(数据范围为0