动态加载NT驱动(源码)

来源:互联网 发布:centos离线下载 编辑:程序博客网 时间:2024/05/21 22:42

下面代码可以直接加载和卸载驱动,哈哈,拿走不谢

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


原创粉丝点击