#include < Winsvc.h>CString s1 = TEXT("MyDriver1.sys"); //lpServiceNameCString s2 = TEXT("C://MyDriver1.sys");//lpPathNameBOOL CMFCapplication1Dlg::jiazaiqudong(LPCTSTR lpServiceName, LPCTSTR lpPathName)//加載驅(qū)動(dòng){ SC_HANDLE ScManagerHandle = NULL; SC_HANDLE sc_CreateHanle = NULL; ScManagerHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_access);//建立了一個(gè)連接到服務(wù)控制管理器,并打開(kāi)指定的數(shù)據(jù)庫(kù) if (NULL == ScManagerHandle) { TRACE("OpenSCManager fail"); UpdateData(FALSE); return FALSE; } sc_CreateHanle = CreateService( ScManagerHandle, lpServiceName,//用于創(chuàng)建登記數(shù)據(jù)庫(kù)中的關(guān)鍵字 lpServiceName,//用于用戶(hù)界面標(biāo)識(shí)服務(wù) SC_MANAGER_ALL_ACCESS,//指定服務(wù)返回類(lèi)型 SERVICE_KERNEL_DRIVER,//加載類(lèi)型為:驅(qū)動(dòng)類(lèi)型 SERVICE_DEMAND_START,//指定何時(shí)啟動(dòng)服務(wù) SERVICE_ERROR_IGNORE,//忽略異常 lpPathName,//加載驅(qū)動(dòng)的路徑 NULL, NULL, NULL, NULL, NULL ); if (sc_CreateHanle == NULL) { if (ERROR_SERVICE_EXISTS == GetLastError()) { m_FilePath = "驅(qū)動(dòng)已經(jīng)加載"; UpdateData(FALSE); return FALSE; } sc_CreateHanle = OpenService(ScManagerHandle, lpServiceName, SC_MANAGER_ALL_ACCESS); if (sc_CreateHanle == NULL) return FALSE; } StartService(sc_CreateHanle, NULL, NULL); m_FilePath = "驅(qū)動(dòng)加載成功"; UpdateData(FALSE); CloseServiceHandle(sc_CreateHanle); CloseServiceHandle(ScManagerHandle); return TRUE;}BOOL CMFCApplication1Dlg::xiezaiqudong(LPCTSTR lpServiceName)//卸載驅(qū)動(dòng)程序 { BOOL bRet = FALSE; SC_HANDLE hServiceMgr = NULL;//SCM管理器的句柄 SC_HANDLE hServiceDDK = NULL;//NT驅(qū)動(dòng)程序的服務(wù)句柄 SERVICE_STATUS SvrSta; //打開(kāi)SCM管理器 hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (hServiceMgr == NULL) { //帶開(kāi)SCM管理器失敗 PRintf("OpenSCManager() Faild %d ! /n", GetLastError()); bRet = FALSE; goto BeforeLeave; } else { //帶開(kāi)SCM管理器失敗成功 printf("OpenSCManager() ok ! /n"); } //打開(kāi)驅(qū)動(dòng)所對(duì)應(yīng)的服務(wù) hServiceDDK = OpenService(hServiceMgr, lpServiceName, SERVICE_ALL_ACCESS); if (hServiceDDK == NULL) { //打開(kāi)驅(qū)動(dòng)所對(duì)應(yīng)的服務(wù)失敗 printf("OpenService() Faild %d ! /n", GetLastError()); bRet = FALSE; goto BeforeLeave; } else { printf("OpenService() ok ! /n"); } //停止驅(qū)動(dòng)程序,如果停止失敗,只有重新啟動(dòng)才能,再動(dòng)態(tài)加載。 if (!ControlService(hServiceDDK, SERVICE_CONTROL_STOP, &SvrSta)) { printf("ControlService() Faild %d !/n", GetLastError()); } else { //打開(kāi)驅(qū)動(dòng)所對(duì)應(yīng)的失敗 printf("ControlService() ok !/n"); } //動(dòng)態(tài)卸載驅(qū)動(dòng)程序。 if (!DeleteService(hServiceDDK)) { //卸載失敗 printf("DeleteSrevice() Faild %d !/n", GetLastError()); } else { //卸載成功 printf("DelServer:deleteSrevice() ok !/n"); } bRet = TRUE; BeforeLeave: //離開(kāi)前關(guān)閉打開(kāi)的句柄 if (hServiceDDK) { CloseServiceHandle(hServiceDDK); } if (hServiceMgr) { CloseServiceHandle(hServiceMgr); } return bRet; return TRUE;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注