vc++ 加载,卸载自己的驱动程序
用vc++加载自己的驱动程序主要分为以下几个步骤:
1、加载驱动服务
主要要用到以下几个函数
- SC_HANDLE
- WINAPI
- OpenSCManagerA(
- __in_opt LPCSTR lpMachineName,
- __in_opt LPCSTR lpDatabaseName,
- __in DWORD dwDesiredAccess
- );
- //创建驱动服务
- SC_HANDLE
- WINAPI
- CreateServiceA(
- __in SC_HANDLE hSCManager,
- __in LPCSTR lpServiceName,
- __in_opt LPCSTR lpDisplayName,
- __in DWORD dwDesiredAccess,
- __in DWORD dwServiceType,
- __in DWORD dwStartType,
- __in DWORD dwErrorControl,
- __in_opt LPCSTR lpBinaryPathName,
- __in_opt LPCSTR lpLoadOrderGroup,
- __out_opt LPDWORD lpdwTagId,
- __in_opt LPCSTR lpDependencies,
- __in_opt LPCSTR lpServiceStartName,
- __in_opt LPCSTR lpPassword
- );
- //打开驱动服务
- SC_HANDLE
- WINAPI
- OpenServiceA(
- __in SC_HANDLE hSCManager,
- __in LPCSTR lpServiceName,
- __in DWORD dwDesiredAccess
- );
- //启动驱动服务
- BOOL
- WINAPI
- StartServiceA(
- __in SC_HANDLE hService,
- __in DWORD dwNumServiceArgs,
- __in_ecount_opt(dwNumServiceArgs)
- LPCSTR *lpServiceArgVectors
- );
首先调用OpenSCManager函数 建立一个连接到服务控制管理器,然后再调用CreateService创建服务最后调用OpenService和StartService分别打开服务和启动服务。
当服务启动后就可以用CreateFile函数访问驱动程序了代码如下:
- //启动驱动服务
- void LoadDriver()
- {
- SC_HANDLE hSCManager = NULL;
- SC_HANDLE hService = NULL;
- SC_HANDLE hService1 = NULL;
- hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
- hService = CreateService(hSCManager,
- MYWINRIN0, //这是驱动服务名称 这里为"MyWinRing0" 可以自定义任意名称
- MYWINRIN0, //这是驱动服务显示名称,可以自定义任意名称,这里我选择和上面一样
- SERVICE_ALL_ACCESS,
- SERVICE_KERNEL_DRIVER,
- SERVICE_DEMAND_START,
- SERVICE_ERROR_NORMAL,
- gDriverPath, //驱动存放的路径,这里和应用程序同目录
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
- );
- CloseServiceHandle(hService); //上面创建成功后就关闭掉这个句柄
- hService1 = OpenService(hSCManager, MYWINRIN0, SERVICE_ALL_ACCESS); //打开上面创建的服务,名字为"MyWinRing0"
- , NULL); //启动服务
- CloseServiceHandle(hSCManager);
- CloseServiceHandle(hService1);
- }
2.打开驱动服务
- //驱动服务启动后,打开驱动
- BOOL OpenDriver()
- {
- ];
- gHandle = CreateFile(
- _T("\\\\.\\") OLS_DRIVER_ID, //这个地方的名字必须是驱动程序里面IoCreateDevice函数创建设备是 使用的名字
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
- int code=GetLastError();
- if (gHandle == INVALID_HANDLE_VALUE)
- {
- return FALSE;
- }
- return TRUE;
- }
3.停止驱动
- //停止驱动
- BOOL StopDriver(SC_HANDLE hSCManager,LPCTSTR DriverId)
- {
- SC_HANDLE hService = NULL;
- BOOL rCode = FALSE;
- SERVICE_STATUS serviceStatus;
- DWORD error = NO_ERROR;
- hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS);
- if (hService != NULL)
- {
- rCode = ControlService(hService, SERVICE_CONTROL_STOP, &serviceStatus);
- error = GetLastError();
- CloseServiceHandle(hService);
- }
- return rCode;
- }
4.卸载驱动
- //卸载驱动
- BOOL RemoveDriver(SC_HANDLE hSCManager, LPCTSTR DriverId)
- {
- SC_HANDLE hService = NULL;
- BOOL rCode = FALSE;
- hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS);
- if (hService == NULL)
- {
- rCode = TRUE;
- }
- else
- {
- rCode = DeleteService(hService);
- CloseServiceHandle(hService);
- }
- return rCode;
- }
rar 改 jpg
vc++ 加载,卸载自己的驱动程序的更多相关文章
- Linux设备驱动程序加载/卸载方法 insmod和modprobe命令
linux加载/卸载驱动有两种方法. 1.modprobe 注:在使用这个命令加载模块前先使用depmod -a命令生成modules.dep文件,该文件位于/lib/modules/$(uname ...
- c#动态加载卸载DLL的方法
这篇文章介绍了c#动态加载卸载DLL的方法,有需要的朋友可以参考一下 c#中通过反射可以方便的动态加载dll程序集,但是如果你需要对dll进行更新,却发现.net类库没有提供卸载dll程序集的方法.在 ...
- [转][osg]关于PagedLOD 加载卸载机制
你的PagedLOD 为什么没有卸载 转自:http://bbs.osgchina.org/forum.php?mod=viewthread&tid=7612&highlight=Pa ...
- 2018-2-13-C#-动态加载卸载-DLL
title author date CreateTime categories C# 动态加载卸载 DLL lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:2 ...
- CE驱动动态加载卸载
加载: #define DEV_KEY TEXT("Drivers\\Builtin\\WCDMA") BOOL CGPRSCTRLDlg::Load() { //DWORD dw ...
- IDA 与VC 加载符号表
将Windbg路径下的symsrv.yes 拷贝到ida 的安装目录,重新分析ntoskrnl.exe, 加载本地的符号表 添加环境变量 变量名:_NT_SYMBOL_PATH变量值:SRV*{$P ...
- C# 动态加载卸载 DLL
我最近做的软件,需要检测dll或exe是否混淆,需要反射获得类名,这时发现,C#可以加载DLL,但不能卸载DLL.于是在网上找到一个方法,可以动态加载DLL,不使用时可以卸载. 我在写一个WPF 程序 ...
- c#动态加载卸载DLL
前段时间工作的时候遇到一个问题.就是需要每次启动程序的时候动态替换掉某个dll,所以就百度了这方面的资料.这次记录下来让自己以后可以看. 根据自己的理解,动态卸载dll需要有以下条件: 1:dll在加 ...
- Unity5 AssetBundle系列——资源加载卸载以及AssetBundleManifest的使用
下面代码列出了对于assetbundle资源的常用操作,其中有针对bundle.asset.gameobject三种类型对象的操作,实际使用中尽量保证成对使用. 这一块的操作比较繁琐,但只要使用正确, ...
随机推荐
- 在Py文件中引入django环境
复制manage.py中的相关代码即可并将文件置于Project文件夹(与manage.py同位置)下 示例: #! /usr/bin/env python # -*- coding:utf- -*- ...
- js中修改标签的hidden属性
hidden属性在html5中,只要存在,就是隐藏效果,而不论值为多少 要显示元素,要删除hidden属性,而不是设置为false <script type="text/javascr ...
- storm单机环境部署
前面说过storm集群的部署,这篇主要介绍storm单机环境部署,其实他们之间很类似,就是将之前配置文件中所有的集群条目改成本机的地址即可,部署之前应该按前面solr和zookeeper单机环境部署那 ...
- ABAP 权限程序
检查用户销售区域与分销渠道的权限 AUTHORITY-CHECK OBJECT 'V_VBAK_VKO' ID 'VKORG' FIELD wa_all-vkorg ID 'V ...
- 网站配置好了,在本地能登录系统,但是挂在IIS上就无法登录了,提示数据库连接错误
我用的VS2010开发的网站,但是挂在本机的IIS上的时候就无法登录了,提示错误如下:
- .NET微信公众号开发-5.0微信支付
一.前言 在开始做这个功能之前,我们要做的第一件事情就是思考,如何做这个微信支付,从哪里开始,从哪里入手,官方的sdk说明什么的,有没有什么官方的demo,还有就是老板给我的一些资料齐全不,那些要申请 ...
- objective-c数组
1 #pragma mark -----------数组的初始化方式-------------- 2 // insert code here... 3 // NSLo ...
- php dirname($path) 中文路径不对问题
将$path中的\改为/ $dir=__FILE__;$dir = str_replace("\\","/", $dir);$dir=dirname($dir) ...
- ppt动画制作bullets
动画->效果选项->作为一个对象 这样之后,字总是在一段时间后就自己出来,而不是我们点一下再出来,解决方法是对同一段字重复设置,后面那个会默认是点一下,出一张,在把之前的动画删除即可.
- c_test
1.int a[][4]={0,0};与int a[3][4] = {0}; 元素不够的就以位模式初始化为0 a[第一维][第二维] 的大小,也就是最多存几个 int a[][3]={1,2,3,4, ...