您的位置:首页 > 其它

动态加载NT驱动(源码)

2017-05-31 16:41 211 查看
下面代码可以直接加载和卸载驱动,哈哈,拿走不谢

#include <winsvc.h>

// function : LoadDriver
// purpose   : 加载驱动
//
// parameter : [IN] lpPath 驱动的完整路径
//      [OUT]
//
//
// author   : liangyu
// created   : 2008-7-10   17:19
// ***************************************************************
BOOL Ctest2Dlg::LoadDriver(LPTSTR lpPath)
{
SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (NULL == hSCManager)
{
return FALSE;
}
SC_HANDLE hService = CreateService(hSCManager, _T("SSDTTool"),
_T("SSDTTool Driver"), SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE, lpPath, NULL, NULL, NULL, NULL, NULL);
if (NULL == hService)
{
if (ERROR_SERVICE_EXISTS == GetLastError())//如果是"已经存在该驱动"导致的错误则继续
{
hService = OpenService(hSCManager, _T("SSDTTool"), SERVICE_ALL_ACCESS);
}
else
{
return FALSE;
}
}
StartService(hService, 0, NULL);
CloseServiceHandle(hService);
CloseServiceHandle(hSCManager); return TRUE;
}

// ***************************************************************
// function : UnLoadDriver
// purpose   : 卸载驱动
//
// parameter : [IN] lpName 服务(驱动在SCM注册的)名字
//      [OUT]
//
//
// author   : liangyu
// created   : 2008-7-10   17:41
// ***************************************************************
BOOL Ctest2Dlg::UnLoadDriver(LPTSTR lpName)
{
SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (NULL == hSCManager)
{
return FALSE;
}
SC_HANDLE hService = OpenService(hSCManager, lpName, SERVICE_ALL_ACCESS);
if (NULL == hService)
{
return FALSE;
}
SERVICE_STATUS ss;
ControlService(hService, SERVICE_CONTROL_STOP, &ss);
DeleteService(hService);
CloseServiceHandle(hService);
CloseServiceHandle(hSCManager); return TRUE;
}

void Ctest2Dlg::OnBnClickedButton1()
{
// TODO:  在此添加控件通知处理程序代码
UpdateData(TRUE);
LoadDriver((LPSTR)(LPCTSTR)m_path);
}

void Ctest2Dlg::OnBnClickedButton2()
{
// TODO:  在此添加控件通知处理程序代码

UnLoadDriver("SSDTTool");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: