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

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

一、卸载驱动源代码

BOOL UnloadDriver(const  char* 驱动名称)
{
  BOOL 返回值 = FALSE;
  SC_HANDLE 管理器句柄 = NULL;
  SC_HANDLE 驱动服务句柄 = NULL;
  SERVICE_STATUS 服务状态;
  char 缓存[256] = { 0 };
  管理器句柄 = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  if (管理器句柄 == NULL)
  {    
    sprintf_s(缓存, "nxyn:管理器句柄获取失败:%d\n",GetLastError());
    OutputDebugStringA(缓存);
    返回值 = FALSE;
    goto BeforeLeave;
  }
  else
  {
    sprintf_s(缓存, "nxyn:管理器句柄获取成功\n");
    OutputDebugStringA(缓存);
  }
  驱动服务句柄 = OpenServiceA(管理器句柄, 驱动名称, SERVICE_ALL_ACCESS);
  if (驱动服务句柄 == NULL)
  {
    sprintf_s(缓存, "nxyn:驱动服务句柄获取失败:%d\n", GetLastError());
    OutputDebugStringA(缓存);
    返回值 = FALSE;
    goto BeforeLeave;
  }
  else
  {
    sprintf_s(缓存, "nxyn:驱动服务句柄获取成功\n");
    OutputDebugStringA(缓存);
  }
  //停止驱动程序,如果停止失败,只有重新启动才能,再动态加载。
  if (!ControlService(驱动服务句柄, SERVICE_CONTROL_STOP, &服务状态))
  {
    sprintf_s(缓存, "nxyn:停止驱动程序失败:%d\n", GetLastError());
    OutputDebugStringA(缓存);
  }
  else
  {
    sprintf_s(缓存, "nxyn:停止驱动程序成功\n");
    OutputDebugStringA(缓存);
  }
  //动态卸载驱动程序,删除服务  
  if (!DeleteService(驱动服务句柄))
  {
    //卸载失败
    sprintf_s(缓存, "nxyn:动态卸载驱动程序失败:%d\n", GetLastError());
    OutputDebugStringA(缓存);
  }
  else
  {
    //卸载成功
    sprintf_s(缓存, "nxyn:动态卸载驱动程序成功\n");
    OutputDebugStringA(缓存);
  }
  返回值 = TRUE;
BeforeLeave:
  //离开前关闭打开的句柄
  if (驱动服务句柄)
  {
    CloseServiceHandle(驱动服务句柄);
  }
  if (管理器句柄)
  {
    CloseServiceHandle(管理器句柄);
  }
  return 返回值;
}

二、添加头文件,申明函数

#pragma once
BOOL LoadDriver(const  char* 驱动名称, const  char* 驱动路径);
BOOL UnloadDriver(const  char* 驱动名称);

三、通过卸载按钮,实现卸载驱动

UnloadDriver("123");

四、卸载效果

目录
相关文章
|
9月前
|
关系型数据库 MySQL API
安装驱动
安装驱动。
108 3
|
9月前
|
数据库 C++
2023驱动保护学习 -- 通过代码实现驱动加载
2023驱动保护学习 -- 通过代码实现驱动加载
53 0
|
9月前
|
Go
2023驱动保护学习 -- 卸载驱动程序
2023驱动保护学习 -- 卸载驱动程序
58 0
|
9月前
|
Go 开发工具 C++
2023驱动保护学习 -- 创建第一个驱动程序
2023驱动保护学习 -- 创建第一个驱动程序
85 0
|
9月前
2023驱动保护学习 -- 通过驱动保护进程
2023驱动保护学习 -- 通过驱动保护进程
60 0
|
9月前
|
芯片
8259A驱动编写
8259A驱动编写
110 0
2023驱动保护学习 -- 通过代码实现驱动卸载
2023驱动保护学习 -- 通过代码实现驱动卸载
37 0
|
Linux
【Linux系统开发】 x210开发板 虚拟驱动创建流程(驱动编译进内核)
【Linux系统开发】 x210开发板 虚拟驱动创建流程(驱动编译进内核)
167 0
|
Unix Linux Shell