- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
应用程序与驱动程序通信的源码
与驱动程序通信的源码
///////////////////////////////////////////////////
// Driver.h文件
#ifndef __DRIVER_H__
#define __DRIVER_H__
#include Winsvc.h // 为了使用SCM函数
class CDriver
{
public:
// 构造函数和析构函数
// 构造函数,pszDriverPath为驱动所在目录,pszLinkName为符号连接名字
// 在类的构造函数中,将试图创建或打开服务,
CDriver(LPCTSTR pszDriverPath, LPCTSTR pszLinkName);
// 析构函数。在这里,将停止服务,
virtual ~CDriver();
// 属性
// 此驱动是否可用
virtual BOOL IsValid() { return (m_hSCM != NULL m_hService != NULL); }
// 操作
// 开启服务。也就是说驱动的DriverEntry函数将被调用
virtual BOOL StartDriver();
// 结束服务。即驱动程序的DriverUnload例程将被调用
virtual BOOL StopDriver();
// 打开设备,即取得到此驱动的一个句柄
virtual BOOL OpenDevice();
// 向设备发送控制代码
virtual DWORD IoControl(DWORD nCode, PVOID pInBuffer,
DWORD nInCount, PVOID pOutBuffer, DWORD nOutCount);
// 实现
protected:
char m_szLinkName[56]; // 符号连接名称
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_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_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_hService = ::OpenService(m_hSCM, m_szLinkName, SERVICE_ALL_ACCESS);
}
}
else
{
m_bCreateService = TRUE;
}
}
CDriver::~CDriver()
{
// 关闭设备句柄
if(m_hDriver != INVALID_HANDLE_VALUE)
::CloseHandle(m_hDriver);
您可能关注的文档
- 如何解决视频中的锯齿.doc
- 如何自助建站.docx
- 委托加工物资.ppt
- 孕英1号公司薪酬管理制度26.doc
- 存货管理制度.doc
- 学术报告及答辩用PPT模板10.ppt
- 学校校园安全检查记录表.doc
- 学术报告及答辩用PPT模板1.ppt
- 学校备课活页模板.doc
- 安​全​防​护​方​案40107476.doc
- 10《那一年,面包飘香》教案.docx
- 13 花钟 教学设计-2023-2024学年三年级下册语文统编版.docx
- 2024-2025学年中职学校心理健康教育与霸凌预防的设计.docx
- 2024-2025学年中职生反思与行动的反霸凌教学设计.docx
- 2023-2024学年人教版小学数学一年级上册5.docx
- 4.1.1 线段、射线、直线 教学设计 2024-2025学年北师大版七年级数学上册.docx
- 川教版(2024)三年级上册 2.2在线导航选路线 教案.docx
- Unit 8 Dolls (教学设计)-2024-2025学年译林版(三起)英语四年级上册.docx
- 高一上学期体育与健康人教版 “贪吃蛇”耐久跑 教案.docx
- 第1课时 亿以内数的认识(教学设计)-2024-2025学年四年级上册数学人教版.docx
文档评论(0)