资源描述:
《应用程序与驱动程序通信的源码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
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