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

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

ID:9788000

大小:42.50 KB

页数:5页

时间:2018-05-09

应用程序与驱动程序通信的源码_第1页
应用程序与驱动程序通信的源码_第2页
应用程序与驱动程序通信的源码_第3页
应用程序与驱动程序通信的源码_第4页
应用程序与驱动程序通信的源码_第5页
资源描述:

《应用程序与驱动程序通信的源码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、与驱动程序通信的源码/////////////////////////////////////////////////////Driver.h文件#ifndef__DRIVER_H__#define__DRIVER_H__#include//为了使用SCM函数classCDriver{public://构造函数和析构函数//构造函数,pszDriverPath为驱动所在目录,pszLinkName为符号连接名字//在类的构造函数中,将试图创建或打开服务,CDriver(LPCTSTRpszDriverP

2、ath,LPCTSTRpszLinkName);//析构函数。在这里,将停止服务,virtual~CDriver();//属性//此驱动是否可用virtualBOOLIsValid(){return(m_hSCM!=NULL&&m_hService!=NULL);}//操作//开启服务。也就是说驱动的DriverEntry函数将被调用virtualBOOLStartDriver();//结束服务。即驱动程序的DriverUnload例程将被调用virtualBOOLStopDriver();//打开设备,即取得到此驱动的一

3、个句柄virtualBOOLOpenDevice();//向设备发送控制代码virtualDWORDIoControl(DWORDnCode,PVOIDpInBuffer,DWORDnInCount,PVOIDpOutBuffer,DWORDnOutCount);//实现protected:charm_szLinkName[56];//符号连接名称BOOLm_bStarted;//指定服务是否启动BOOLm_bCreateService;//指定是否创建了服务HANDLEm_hSCM;//SCM数据库句柄HANDLEm_h

4、Service;//服务句柄HANDLEm_hDriver;//设备句柄};CDriver::CDriver(LPCTSTRpszDriverPath,LPCTSTRpszLinkName){strncpy(m_szLinkName,pszLinkName,55);m_bStarted=FALSE;m_bCreateService=FALSE;m_hSCM=m_hService=NULL;m_hDriver=INVALID_HANDLE_VALUE;//打开SCM管理器m_hSCM=::OpenSCManager(NULL

5、,NULL,SC_MANAGER_ALL_ACCESS);if(m_hSCM==NULL){MessageBox(0,"打开服务控制管理器失败","可能是因为您不拥有Administrator权限",0);return;}//创建或打开服务m_hService=::CreateService(m_hSCM,m_szLinkName,m_szLinkName,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORM

6、AL,pszDriverPath,NULL,0,NULL,NULL,NULL);if(m_hService==NULL){//创建服务失败,可能是因为服务已经存在,所以还要试图打开它intnError=::GetLastError();if(nError==ERROR_SERVICE_EXISTS

7、

8、nError==ERROR_SERVICE_MARKED_FOR_DELETE){m_hService=::OpenService(m_hSCM,m_szLinkName,SERVICE_ALL_ACCESS);}}else{

9、m_bCreateService=TRUE;}}CDriver::~CDriver(){//关闭设备句柄if(m_hDriver!=INVALID_HANDLE_VALUE)::CloseHandle(m_hDriver);//如果创建了服务,就将之删除if(m_bCreateService){StopDriver();::DeleteService(m_hService);}//关闭句柄if(m_hService!=NULL)::CloseServiceHandle(m_hService);if(m_hSCM!=NULL

10、)::CloseServiceHandle(m_hSCM);}BOOLCDriver::StartDriver(){if(m_bStarted)returnTRUE;if(m_hService==NULL)returnFALSE;//启动服务if(!::StartService(m_hService,0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。