if hServiceTwdm=0 then begin if GetLastError()=ERROR_SERVICE_EXISTS then begin {Service Exists} hServiceTwdm:=OpenService(hServiceMgr,PChar(szSvrName),SERVICE_ALL_ACCESS); if hServiceTwdm=0 then begin CloseServiceHandle(hServiceMgr); Result:=False; Exit; end; end else begin CloseServiceHandle(hServiceMgr); Result:=False; Exit; end; end;
{Start the drivers} if hServiceTwdm<>0 then begin if StartService(hServiceTwdm,0,p)=False then begin if ERROR_SERVICE_ALREADY_RUNNING=GetLastError() then begin {no real problem} end else begin CloseServiceHandle(hServiceMgr); CloseServiceHandle(hServiceTwdm); Result:=False; Exit; end; end;
function UnInstallDriver(szSvrName:string):Boolean; var hServiceMgr,hServiceTwdm:SC_HANDLE; SvrSta:SERVICE_STATUS; begin hServiceMgr:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS ); if hServiceMgr=0 then begin {OpenSCManager() Faild.} Result:=False; Exit; end;
hServiceTwdm:=OpenService(hServiceMgr,PChar(szSvrName),SERVICE_ALL_ACCESS ); if hServiceTwdm=0 then begin {OpenService() Faild.} CloseServiceHandle(hServiceMgr); Result:=False; Exit; end;
{停止驱动程序,如果停止失败,只有重新启动才能,再动态加载。} if ControlService(hServiceTwdm,SERVICE_CONTROL_STOP,SvrSta)=False then begin {ControlService() Faild.} CloseServiceHandle(hServiceTwdm); CloseServiceHandle(hServiceMgr); Result:=False; Exit; end; {动态卸载驱动程序.} if DeleteService(hServiceTwdm)=False then begin {DeleteSrevice() Faild.} CloseServiceHandle(hServiceTwdm); CloseServiceHandle(hServiceMgr); Result:=False; Exit; end;