首页 > 数码 >
阅读

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

时间:2023-04-06 10:54 来源:网络 作者: 迷吧

简介:一、卸载驱动源代码 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:管

【晨说网探索分享】

一、卸载驱动源代码

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)

声明:本文内容仅代表作者个人观点,与本站立场无关。如有内容侵犯您的合法权益,请及时与我们联系,我们将第一时间安排处理。