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

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

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

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

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

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

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

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

2、通过CreateServiceA创建驱动服务

驱动服务句柄 = CreateServiceA(管理器句柄,
    驱动名称,
    驱动名称,
    SERVICE_START,
    SERVICE_KERNEL_DRIVER,
    SERVICE_DEMAND_START,
    SERVICE_ERROR_NORMAL,
    完整驱动路径,
    NULL,
    NULL,
    NULL,
    NULL,
    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月前
2023驱动保护学习 -- 通过代码实现驱动卸载
2023驱动保护学习 -- 通过代码实现驱动卸载
16 0
|
4月前
|
Go 开发工具 C++
2023驱动保护学习 -- 创建第一个驱动程序
2023驱动保护学习 -- 创建第一个驱动程序
30 0
|
4月前
|
芯片
8259A驱动编写
8259A驱动编写
27 0
|
4月前
2023驱动保护学习 -- 通过驱动保护进程
2023驱动保护学习 -- 通过驱动保护进程
19 0
|
5月前
|
Windows
5.1 Windows驱动开发:判断驱动加载状态
在驱动开发中我们有时需要得到驱动自身是否被加载成功的状态,这个功能看似没啥用实际上在某些特殊场景中还是需要的,如下代码实现了判断当前驱动是否加载成功,如果加载成功, 则输出该驱动的详细路径信息。该功能实现的核心函数是`NtQuerySystemInformation`这是一个微软未公开的函数,也没有文档化,不过我们仍然可以通过动态指针的方式调用到它,该函数可以查询到很多系统信息状态,首先需要定义一个指针。
40 0
5.1 Windows驱动开发:判断驱动加载状态
|
7月前
|
数据库 C++
2023驱动保护学习 -- 通过代码实现驱动加载
2023驱动保护学习 -- 通过代码实现驱动加载
28 0
驱动开发:判断自身是否加载成功
在驱动开发中我们有时需要得到驱动自身是否被加载成功的状态,这个功能看似没啥用实际上在某些特殊场景中还是需要的,如下代码实现了判断当前驱动是否加载成功,如果加载成功, 则输出该驱动的详细路径信息。
239 0
驱动开发:判断自身是否加载成功
|
Windows
Logitech GHub 驱动长时间加载/初始化解决方案
有关于 G502 Lightspeed 驱动无法正常运行解决方案
668 0
Logitech GHub 驱动长时间加载/初始化解决方案
用kithara驱动控制IS620N伺服电机简单实例
用kithara驱动控制IS620N伺服电机简单实例