实战DeviceIoControl之六:访问物理端口
2010-01-10 09:37:25 来源:WEB开发网核心提示:应用程序实现端口I/O的接口如下:// 全局的设备句柄HANDLE hMyPort; // 打开设备// lpszDevicePath: 设备的路径HANDLE OpenDevice(LPCTSTR lpszDevicePath){ HANDLE hDevice; // 打开设备 hDevice
应用程序实现端口I/O的接口如下:
// 全局的设备句柄 HANDLE hMyPort; // 打开设备 // lpszDevicePath: 设备的路径 HANDLE OpenDevice(LPCTSTR lpszDevicePath) { HANDLE hDevice; // 打开设备 hDevice = ::CreateFile(lpszDevicePath, // 设备路径 GENERIC_READ | GENERIC_WRITE, // 读写方式 FILE_SHARE_READ | FILE_SHARE_WRITE, // 共享方式 NULL, // 默认的安全描述符 OPEN_EXISTING, // 创建方式 0, // 不需设置文件属性 NULL); // 不需参照模板文件 return hDevice; } // 打开端口驱动 BOOL OpenMyPort() { BOOL bResult; // 设备名为"MyPort",驱动程序位于Windows的"system32\drivers"目录中 bResult = StartDriver("system32\\drivers\\MyPort.sys", "MyPort"); // 设备路径为"\\.\MyPort" if (bResult) { hMyPort = OpenDevice("\\\\.\\MyPort"); } return (bResult && (hMyPort != INVALID_HANDLE_VALUE)); } // 关闭端口驱动 BOOL CloseMyPort() { return (CloseHandle(hMyPort) && StopDriver("MyPort")); } // 从指定端口读一个字节 // port: 端口 BYTE ReadPortByte(WORD port) { DWORD buf[2]; // 输入输出缓冲区 DWORD dwOutBytes; // IOCTL输出数据长度 buf[0] = port; // 第一个DWORD是端口 // buf[1] = 0; // 第二个DWORD是数据 // 用IOCTL_MYPORT_READ_BYTE读端口 ::DeviceIoControl(hMyPort, // 设备句柄 IOCTL_MYPORT_READ_BYTE, // 取设备属性信息 buf, sizeof(buf), // 输入数据缓冲区 buf, sizeof(buf), // 输出数据缓冲区 &dwOutBytes, // 输出数据长度 (LPOVERLAPPED)NULL); // 用同步I/O return (BYTE)buf[1]; } // 将一个字节写到指定端口 // port: 端口 // data: 字节数据 void WritePortByte(WORD port, BYTE data) { DWORD buf[2]; // 输入输出缓冲区 DWORD dwOutBytes; // IOCTL输出数据长度 buf[0] = port; // 第一个DWORD是端口 buf[1] = data; // 第二个DWORD是数据 // 用IOCTL_MYPORT_WRITE_BYTE写端口 ::DeviceIoControl(hMyPort, // 设备句柄 IOCTL_MYPORT_WRITE_BYTE, // 取设备属性信息 buf, sizeof(buf), // 输入数据缓冲区 buf, sizeof(buf), // 输出数据缓冲区 &dwOutBytes, // 输出数据长度 (LPOVERLAPPED)NULL); // 用同步I/O }
Tags:实战 DeviceIoControl 访问
编辑录入:爽爽 [复制链接] [打 印]- ››实战:企业使用交换机VLAN路由配置
- ››实战案例分析:高质量软文对网站百度排名的影响
- ››实战经验浅谈网站搬家后的优化工作
- ››实战Active Directory站点部署与管理,Active Dir...
- ››实战操作主机角色转移,Active Directory系列之十...
- ››实战经验:巧用微博推广淘宝网店
- ››实战iPhone GPS定位系统
- ››实战Linux环境配置DBD:Oracle模块
- ››实战DeviceIoControl系列之一:通过API访问设备驱...
- ››实战DeviceIoControl系列之二:获取软盘/硬盘/光盘...
- ››实战DeviceIoControl系列之三:制作磁盘镜像文件
- ››实战DeviceIoControl系列之四:获取硬盘的详细信息...
更多精彩
赞助商链接