最简单的驱动程序代码: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");
四、卸载效果
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com