下面代码可以直接加载和卸载驱动,哈哈,拿走不谢
#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");
}