加载驱动..... void CLoadSysDlg::OnLoadsys() { // TODO: Add your control notification handler code here CFileDialog dlg(true, "sys", 0, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"驱动文件(*.sys)|*.sys|所有文件(*.*)|*.*|"); dlg.m_ofn.lStructSize = 88; if(dlg.DoModal()==IDOK) { SetDlgItemText(IDC_PATH, dlg.GetPathName().LockBuffer()); LoadNtDriver(dlg.GetPathName()); } } // BOOL LoadNtDriver(CString strName) { SC_HANDLE scHandle = OpenSCManager( 0, 0, SC_MANAGER_ALL_ACCESS); if(!scHandle) { AfxMessageBox("装载驱动失败!"); return false; } CString FullPath = strName; CString strTemp = strName; int num = 0; while(num = strName.Find("//") +1) { strTemp = strName.Right( strName.GetLength() - num); strName = strTemp; } SC_HANDLE hService = CreateService( scHandle, strName /*注册表中的名字*/, strName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, FullPath.LockBuffer()/*完整路径名*/,0, 0, 0, 0, 0); if(!hService) { hService = OpenService(scHandle, strName.LockBuffer(), SERVICE_ALL_ACCESS); if(!hService) { TRACE("打开服务出错!"); return false; } } StartService(hService, 0, 0); CloseServiceHandle( hService); CloseServiceHandle( scHandle); return true; } 卸载驱动..... void CLoadSysDlg::OnUnload() { // TODO: Add your control notification handler code here CString str; GetDlgItemText(IDC_PATH, str); UnLoadSys(str); } BOOL CLoadSysDlg::UnLoadSys(CString szName) { CString szTemp; SERVICE_STATUS serStart; while(int num = szName.Find("//") +1) { szTemp = szName.Right( szName.GetLength() - num); szName = szTemp; } SC_HANDLE scHandle = OpenSCManager( 0, 0, SC_MANAGER_ALL_ACCESS); if(!scHandle) { TRACE("打开服务管理器错误!"); return false; } SC_HANDLE hService =OpenService( scHandle, szName.LockBuffer(), SERVICE_ALL_ACCESS); if(!hService) { TRACE("打开服务错误!"); return false; } if(!ControlService( hService, SERVICE_CONTROL_STOP, &serStart)) { TRACE("停止设备错误!"); return false; } if(!DeleteService( hService)) { TRACE("删除错误!"); return false; } return true; }