2023驱动保护学习 -- 通过代码实现驱动加载

简介: 2023驱动保护学习 -- 通过代码实现驱动加载

一、新建一个cpp文件驱动管理

1、通过OpenSCManager获取管理器句柄

管理器句柄 = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

第一个参数,指向计算机名称,此处为NULL表示指向本机

第二个参数,SCM数据库名称,此用为NULL表示使用默认

第三个参数,使用权限,一般设置为SC_MANAGER_ALL_ACCESS表示所有使用权

2、通过CreateServiceA创建驱动服务

1. 驱动服务句柄 = CreateServiceA(管理器句柄,
2.     驱动名称,
3.     驱动名称,
4.     SERVICE_START,
5.     SERVICE_KERNEL_DRIVER,
6.     SERVICE_DEMAND_START,
7.     SERVICE_ERROR_NORMAL,
8.     完整驱动路径,
9.     NULL,
10.     NULL,
11.     NULL,
12.     NULL,
13.     NULL);

第一个参数,管理器句柄

第二个参数,第三个参数,一般就是驱动的名字

第四个参数,访问权限

第五个参数,加载的服务是驱动程序

第六个参数,驱动程序的start值

第七个参数,驱动程序ErrorControl值

第八个参数,开启服务的用户组

第九个参数,输出验证标签

第十个参数,依赖的服务的名称

第十一个参数,用户账户名称

第十二个参数,用户口令

3、如果驱动已经加载,只需打开即可

if (GetLastError() == ERROR_SERVICE_EXISTS) //如果服务已经存在,直接打开
  {
    驱动服务句柄 = OpenServiceA(管理器句柄, 驱动名称, SERVICE_START);
  }

4、关闭上面的服务

if (驱动服务句柄)
  {
    CloseServiceHandle(驱动服务句柄);
  }
  if (管理器句柄)
  {
    CloseServiceHandle(管理器句柄);
  }

二、新建驱动管理头文件,将上面函数的声明函数,添加进去

BOOL LoadDriver(const  char* 驱动名称, const  char* 驱动路径);

三、添加按钮,并调用该函数,实现加载驱动

void CtestDlg::OnBnClickedButtonJzqd()
{
  LoadDriver("123","123.sys");
}

四、运行效果


目录
相关文章
|
4月前
|
数据库连接 数据库
实现加载驱动、得到数据库对象、关闭资源的代码复用,将代码提取到相应的工具包里边。优化程序
该博客文章展示了如何通过创建工具类`Connectiontools`实现数据库连接、语句执行以及资源关闭的代码复用,以优化程序并提高数据库操作的效率和安全性。
|
7月前
|
Linux C语言 Ubuntu
Linux驱动入门——编写第一个驱动
Linux驱动入门——编写第一个驱动
Linux驱动入门——编写第一个驱动
|
7月前
|
数据库 C++
2023驱动保护学习 -- 通过代码实现驱动加载
2023驱动保护学习 -- 通过代码实现驱动加载
42 0
|
7月前
2023驱动保护学习 -- 通过代码实现驱动卸载
2023驱动保护学习 -- 通过代码实现驱动卸载
48 0
|
7月前
|
Go 开发工具 C++
2023驱动保护学习 -- 创建第一个驱动程序
2023驱动保护学习 -- 创建第一个驱动程序
72 0
|
7月前
|
芯片
8259A驱动编写
8259A驱动编写
93 0
|
7月前
2023驱动保护学习 -- 通过驱动保护进程
2023驱动保护学习 -- 通过驱动保护进程
47 0
|
7月前
驱动保护 -- 读取被保护的数据(第二种方法)
驱动保护 -- 读取被保护的数据(第二种方法)
53 0
|
Windows
Logitech GHub 驱动长时间加载/初始化解决方案
有关于 G502 Lightspeed 驱动无法正常运行解决方案
774 0
Logitech GHub 驱动长时间加载/初始化解决方案