首页 > 编程语言 > 详细

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

时间:2015-11-13 10:09:20      阅读:673      评论:0      收藏:0      [点我收藏+]
//需要包含的头文件
#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
//关闭服务
//关闭服务句柄

 

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

原文:http://www.cnblogs.com/cxys/p/4961229.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!