利用SCM加载驱动
来源:互联网 发布:vr球面投影算法 编辑:程序博客网 时间:2024/05/22 08:11
mark一下:
写了一个简单得类
后期会陆续添加其他两种常用方法.
头文件:
class DriverLoader { public:BOOL UnloadNTDriverBySCM();BOOL LoadNTDriverBySCM();DriverLoader(CString paht,CString name);virtual ~DriverLoader();CString driverpath;CString servicename;};
实现文件:
// DriverLoader.cpp: implementation of the DriverLoader class.////////////////////////////////////////////////////////////////////////#include "DriverLoader.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////DriverLoader::DriverLoader(CString path,CString name){this->driverpath = path;this->servicename = name;}DriverLoader::~DriverLoader(){}BOOL DriverLoader::LoadNTDriverBySCM(){BOOL bRet = false;SC_HANDLE hManager = NULL; //SCM管理句柄SC_HANDLE hService = NULL; //NT驱动服务句柄//打开服务控制管理器SCMhManager = OpenSCManager ( NULL, NULL, SC_MANAGER_ALL_ACCESS );if( hManager == NULL ){//打开服务管理器失败MessageBox( NULL, "ERROR", "OpenSCM", MB_OK );bRet = false;CloseServiceHandle( hManager );return bRet;}else{MessageBox( NULL, "SUCCESS", "OpenSCM", MB_OK );}hService = CreateService( hManager,servicename,servicename,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_IGNORE,driverpath,NULL,NULL,NULL,NULL,NULL );DWORD dwRtn;if( hService == NULL ){dwRtn = GetLastError();if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS ){//由于其他原因创建服务失败MessageBox( NULL, "ERROR", "CreateService", MB_OK );bRet = false;CloseServiceHandle( hManager );CloseServiceHandle( hService );return bRet;}else{//服务已经创建过 只需打开服务MessageBox( NULL, "ERROR", "Service Created", MB_OK );}//打开服务hService = OpenService( hManager, servicename, SERVICE_ALL_ACCESS );if( hService == NULL ){//打开服务失败MessageBox( NULL, "ERROR", "OpenService", MB_OK );bRet = false;CloseServiceHandle( hManager );CloseServiceHandle( hService );return bRet;}else{MessageBox( NULL, "SUCCESS", "OpenService", MB_OK );}}else{MessageBox( NULL, "SUCCESS", "CreateService", MB_OK );}//开启服务bRet = StartService( hService, NULL, NULL);if( !bRet ){dwRtn = GetLastError();if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_ALREADY_RUNNING){MessageBox( NULL, "SUCCESS", "StartService", MB_OK );bRet = false;CloseServiceHandle( hManager );CloseServiceHandle( hService );return bRet;}else{if( dwRtn == ERROR_IO_PENDING ){//设备被挂住MessageBox( NULL, "ERROR", "StartService", MB_OK );bRet = false;CloseServiceHandle( hManager );CloseServiceHandle( hService );return bRet;}else{//服务已经启动MessageBox( NULL, "SUCCESS", "StartService", MB_OK );bRet = true;CloseServiceHandle( hManager );CloseServiceHandle( hService );return bRet;}}} MessageBox( NULL, "SUCCESS", "StartService", MB_OK ); CloseServiceHandle( hManager );CloseServiceHandle( hService ); return bRet;}BOOL DriverLoader::UnloadNTDriverBySCM(){BOOL bRet = false;SC_HANDLE hManager = NULL;SC_HANDLE hService = NULL;SERVICE_STATUS SvrSta;//打开SCM管理器hManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );if( hManager == NULL ){//打开服务管理器失败MessageBox( NULL, "ERROR", "OpenSCM", MB_OK );bRet = false;CloseServiceHandle( hManager );return bRet;}else{MessageBox( NULL, "SUCCESS", "OpenSCM", MB_OK );}//打开服务hService = OpenService( hManager, servicename, SERVICE_ALL_ACCESS );if( hService == NULL ){//打开服务失败MessageBox( NULL, "ERROR", "OpenService", MB_OK );bRet = false;CloseServiceHandle( hManager );CloseServiceHandle( hService );return bRet;}else{MessageBox( NULL, "SUCCESS", "OpenService", MB_OK );}//停止驱动if( !ControlService( hService,SERVICE_CONTROL_STOP, &SvrSta) ){MessageBox( NULL, "ERROR", "ControlService", MB_OK );}else{MessageBox( NULL, "SUCCESS", "ControlService", MB_OK );}//卸载服务if( !DeleteService( hService ) ){MessageBox( NULL, "ERROR", "DeleteService", MB_OK );}else{MessageBox( NULL, "SUCCESS", "DeleteService", MB_OK );}bRet = true; CloseServiceHandle( hManager );CloseServiceHandle( hService ); return bRet;}
- 利用SCM加载驱动
- 驱动开发(3)使用SCM加载NT驱动(用应用程序加载驱动)
- 利用Fltmgr加载驱动
- scm
- scm
- scm
- scm
- SCM
- SCM
- SCM
- 利用API函数加载系统服务以加载驱动
- 利用scm manager 创建git server
- 利用Class.forName()将驱动类加载到JVM
- 利用U盘加载控制器驱动来安装Linux系统
- 利用U盘制作虚拟软驱加载raid驱动
- 内核编程学习笔记(002) 利用API函数加载系统服务以加载驱动
- 驱动加载。
- //加载驱动
- websphere 使用JNDI连接数据源的配置文件编写
- 关于线程
- jbpm5学习资料
- 如何查询windows系统端口的占用情况?
- js执行引擎与浏览器内核分析
- 利用SCM加载驱动
- [哈佛幸福课13 听后感]
- 海量数据处理问题
- IOS6区别于IOS5的几个不明显的改变
- TFOJS-1137
- 设计包含min函数的栈,O(1)空间实现方法
- 模拟百度的自动下拉提示框
- StringBuffer的练习
- Objective-C中@private、@protected、@public 解析