当前位置: 首页 > news >正文

驱动的加载与卸载例程(C++/C)

//需要包含的头文件
#include "winsvc.h"
//====================全局变量
SC_HANDLE m_ScmHandle;
SC_HANDLE m_HerService;
/*函数功能*/ ----第一步
//
打开SCM管理器 (获取SCM句柄) - OpenSCManagerA //创建驱动服务 (获得服务句柄,如果服务存在,此步则变成打开服务) CreateServiceA BOOL MyLoadDriver(PCHAR SzSysFileName,PCHAR SzSysFilePath) { m_ScmHandle = NULL; m_HerService = NULL; //打开SCM管理器 (获取SCM句柄) - OpenSCManagerA m_ScmHandle = OpenSCManagerA(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (m_ScmHandle == NULL) { AfxMessageBox("OpenSCManagerA ERROR"); m_loadAddDriverError = GetLastError(); return FALSE; } m_HerService = CreateServiceA(m_ScmHandle,SzSysFileName,SzSysFileName,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,SzSysFilePath,NULL,NULL,NULL,NULL,NULL); if (m_HerService == NULL) { m_loadAddDriverError = GetLastError(); if ( m_loadAddDriverError == ERROR_SERVICE_EXISTS) { m_HerService = OpenService(m_ScmHandle,SzSysFileName,SERVICE_ALL_ACCESS); if (m_HerService == NULL) { CloseServiceHandle(m_ScmHandle); return FALSE; } }else { CloseServiceHandle(m_ScmHandle); return FALSE; } } return TRUE; }
//   名称:StartDriver
//   功能:开启服务,输出到程序
//   
BOOL CProcessDlg::StartDriver(void)
{
    if (m_HerService == NULL)
    {
        AfxMessageBox("m_HerService [Null Handle]");
        return FALSE;
    }
    if (!StartService(m_HerService,NULL,NULL))
    {
        m_loadAddDriverError = GetLastError();
        CString Str;
        Str.Format("Error:%d\n",m_loadAddDriverError);
        m_outputdrivertext.SetWindowTextA(Str);
        return FALSE;
    }
    m_outputdrivertext.SetWindowTextA("Start Success");
    return 0;
}
//  关闭驱动服务
BOOL CProcessDlg::StopSerVice(void)
{
    SERVICE_STATUS ss;
    if (!ControlService(m_HerService,SERVICE_CONTROL_STOP,&ss))
    {
        m_loadAddDriverError = GetLastError();
        m_outputdrivertext.SetWindowTextA("停止服务失败!");
    }
    m_outputdrivertext.SetWindowTextA("Stop Success");
    return 0;
}
//最后在来一个卸载
BOOL CProcessDlg::Remove(void)
{
    CloseServiceHandle(m_HerService);
    if (!DeleteService(m_HerService))
    {
        m_loadAddDriverError = GetLastError();
        m_outputdrivertext.SetWindowTextA("驱动卸载失败!");
    }
    m_outputdrivertext.SetWindowTextA("Delete Success");
    return 0;
}

 

驱动加载主要流程
//打开SCM管理器 (获取SCM句柄) - OpenSCManagerA
//创建驱动服务  (获得服务句柄,如果服务存在,此步则变成打开服务)CreateServiceA
//启动服务 - StartServiceA
//停止服务 - ControlService
//卸载服务 - DeleteService
//关闭服务
//关闭服务句柄

 

转载于:https://www.cnblogs.com/cxys/p/4961229.html

相关文章:

  • 寻找
  • Apache 文件根目录设置修改方法 (Document Root)
  • UIView之【UIViewContentMode】
  • Oracle 错误总结及问题解决 ORA
  • android之intent显式,显式学习
  • Daily Scrum - 11/19
  • 标签禁用之readonly和disabled
  • 利用shell实现批量添加用户
  • 关机--小程序
  • Elaticsearch REST API常用技巧
  • eclipse控制台乱码的解决方法
  • QT信号槽机制
  • Nginx 配置详解
  • Monitor traffic to localhost from IE or .NET
  • scala可变长度参数(二)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • @angular/forms 源码解析之双向绑定
  • JavaScript-Array类型
  • java概述
  • JAVA之继承和多态
  • JSONP原理
  • js如何打印object对象
  • Redis 中的布隆过滤器
  • storm drpc实例
  • 百度小程序遇到的问题
  • 面试总结JavaScript篇
  • 前端之React实战:创建跨平台的项目架构
  • 使用SAX解析XML
  • 微信小程序:实现悬浮返回和分享按钮
  • 7行Python代码的人脸识别
  • Spring Batch JSON 支持
  • 移动端高清、多屏适配方案
  • ​水经微图Web1.5.0版即将上线
  • #14vue3生成表单并跳转到外部地址的方式
  • $NOIp2018$劝退记
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (分类)KNN算法- 参数调优
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (六)激光线扫描-三维重建
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (转)linux 命令大全
  • (转)memcache、redis缓存
  • (转)平衡树
  • .form文件_一篇文章学会文件上传
  • .NET 中的轻量级线程安全
  • .NET中的Exception处理(C#)
  • .skip() 和 .only() 的使用
  • [2016.7.Test1] T1 三进制异或
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [ACM] hdu 1201 18岁生日
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)