一、卸载驱动源代码

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");

四、卸载效果

最简单的驱动程序代码:2023驱动保护学习--(1)

,