ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:42.50KB ,
资源ID:3156522      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3156522.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(应用程序与驱动程序通信的源码.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

应用程序与驱动程序通信的源码.doc

1、与驱动程序通信的源码/ Driver.h文件#ifndef _DRIVER_H_#define _DRIVER_H_#include / 为了使用SCM函数class CDriverpublic:/ 构造函数和析构函数/ 构造函数,pszDriverPath为驱动所在目录,pszLinkName为符号连接名字/ 在类的构造函数中,将试图创建或打开服务,CDriver(LPCTSTR pszDriverPath, LPCTSTR pszLinkName);/ 析构函数。在这里,将停止服务,virtual CDriver();/ 属性/ 此驱动是否可用virtual BOOL IsValid()

2、return (m_hSCM != NULL / 操作/ 开启服务。也就是说驱动的DriverEntry函数将被调用virtual BOOL StartDriver();/ 结束服务。即驱动程序的DriverUnload例程将被调用virtual BOOL StopDriver();/ 打开设备,即取得到此驱动的一个句柄virtual BOOL OpenDevice();/ 向设备发送控制代码virtual DWORD IoControl(DWORD nCode, PVOID pInBuffer, DWORD nInCount, PVOID pOutBuffer, DWORD nOutCoun

3、t);/ 实现protected:char m_szLinkName56; / 符号连接名称BOOL m_bStarted; / 指定服务是否启动BOOL m_bCreateService; / 指定是否创建了服务HANDLE m_hSCM; / SCM数据库句柄HANDLE m_hService; / 服务句柄HANDLE m_hDriver; / 设备句柄;CDriver:CDriver(LPCTSTR pszDriverPath, LPCTSTR pszLinkName)strncpy(m_szLinkName, pszLinkName, 55);m_bStarted = FALSE;m

4、_bCreateService = FALSE;m_hSCM = m_hService = NULL;m_hDriver = INVALID_HANDLE_VALUE;/ 打开SCM管理器m_hSCM = :OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);if(m_hSCM = NULL)MessageBox(0, “打开服务控制管理器失败n“, “可能是因为您不拥有Administrator权限n“, 0);return;/ 创建或打开服务m_hService = :CreateService(m_hSCM, m_szLinkName, m_

5、szLinkName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, pszDriverPath, NULL, 0, NULL, NULL, NULL);if(m_hService = NULL)/ 创建服务失败,可能是因为服务已经存在,所以还要试图打开它int nError = :GetLastError();if(nError = ERROR_SERVICE_EXISTS | nError = ERROR_SERVICE_MARKED_FOR_DELETE)m_h

6、Service = :OpenService(m_hSCM, m_szLinkName, SERVICE_ALL_ACCESS);elsem_bCreateService = TRUE;CDriver:CDriver()/ 关闭设备句柄if(m_hDriver != INVALID_HANDLE_VALUE):CloseHandle(m_hDriver);/ 如果创建了服务,就将之删除if(m_bCreateService)StopDriver();:DeleteService(m_hService);/ 关闭句柄if(m_hService != NULL):CloseServiceHandl

7、e(m_hService);if(m_hSCM != NULL):CloseServiceHandle(m_hSCM);BOOL CDriver:StartDriver()if(m_bStarted)return TRUE;if(m_hService = NULL)return FALSE;/ 启动服务if(!:StartService(m_hService, 0, NULL)int nError = :GetLastError();if(nError = ERROR_SERVICE_ALREADY_RUNNING)m_bStarted = TRUE;else:DeleteService(m_

8、hService);else/ 启动成功后,等待服务进入运行状态int nTry = 0;SERVICE_STATUS ss;:QueryServiceStatus(m_hService, while(ss.dwCurrentState = SERVICE_START_PENDING :QueryServiceStatus(m_hService, if(ss.dwCurrentState = SERVICE_RUNNING)m_bStarted = TRUE;return m_bStarted;BOOL CDriver:StopDriver()if(!m_bStarted)return TRU

9、E;if(m_hService = NULL)return FALSE;/ 停止服务SERVICE_STATUS ss;if(!:ControlService(m_hService, SERVICE_CONTROL_STOP, else/ 等待服务完全停止运行int nTry = 0;while(ss.dwCurrentState = SERVICE_STOP_PENDING :QueryServiceStatus(m_hService, if(ss.dwCurrentState = SERVICE_STOPPED)m_bStarted = FALSE;return !m_bStarted;B

10、OOL CDriver:OpenDevice()if(m_hDriver != INVALID_HANDLE_VALUE)return TRUE;/ “.“是Win32中定义本地计算机的方法,/ m_szLinkName是设备对象的符号连接名称,后面章节会详细讨论char sz256 = “;wsprintf(sz, “.%s“, m_szLinkName);/ 打开驱动程序所控制设备m_hDriver = :CreateFile(sz,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);r

11、eturn (m_hDriver != INVALID_HANDLE_VALUE);DWORD CDriver:IoControl(DWORD nCode, PVOID pInBuffer, DWORD nInCount, PVOID pOutBuffer, DWORD nOutCount)if(m_hDriver = INVALID_HANDLE_VALUE)return -1;/ 向驱动程序发送控制代码DWORD nBytesReturn;BOOL bRet = :DeviceIoControl(m_hDriver, nCode, pInBuffer, nInCount, pOutBuffer, nOutCount, if(bRet)return nBytesReturn;elsereturn -1;#endif / _DRIVER_H_

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。