We don't display ads so we rely on your Bitcoin donations to 1KWEk9QaiJb2NwP5YFmR24LyUBa4JyuKqZ
Post date: Mar 16, 2010 3:37:22 PM
On Microsoft Windows operating systems, a Windows service is a long-running executable that performs specific functions and which is designed not to require user intervention. Windows services can be configured to start when the operating system is booted and run in the background as long as Windows is running, or they can be started manually when required. They are similar in concept to a Unix daemon. Many appear in the processes list in the Windows Task Manager, most often with a username of SYSTEM, LOCAL SERVICE or NETWORK SERVICE, though not all processes with the SYSTEM username are services. The remaining services run through svchost.exe as DLLs loaded into memory.
Read more: http://en.wikipedia.org/wiki/Windows_service
uses WinSvc;var hLib : Cardinal;type PENUM_SERVICE_STATUS = ^ENUM_SERVICE_STATUS; ENUM_SERVICE_STATUS = packed record lpServiceName : PChar; lpDisplayName : PChar; ServiceStatus : SERVICE_STATUS; end;type TcsEnumServicesStatus = function( const hSCManager : DWord; // handle to SCM database const dwServiceType : DWord; // service type const dwServiceState : DWord; // service state const lpServices : PENUM_SERVICE_STATUS; // status buffer const cbBufSize : DWord; // size of status buffer const pcbBytesNeeded : PDWORD; // buffer size needed const lpServicesReturned : PDWord; // number of entries returned const lpResumeHandle : PDWord // next entry ) : Boolean; stdcall; TcsOpenSCManager = function( const lpMachineName : PChar; const lpDatabaseName : PChar; const dwDesiredAccess : DWord ) : DWord; stdcall;var EnumServicesStatus : TcsEnumServicesStatus; OpenSCManager : TcsOpenSCManager;procedure TForm1.Button1Click(Sender: TObject);var hSC: Cardinal; pStatus : PENUM_SERVICE_STATUS; pWork : PENUM_SERVICE_STATUS; cbBufSize : DWord; pcbBytesNeeded : DWord; lpServicesReturned : DWord; lpResumeHandle : DWord; i : integer; s : String;begin hSC := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); if hSC <> 0 then begin try cbBufSize := 0; pStatus := nil; lpResumeHandle := 0; EnumServicesStatus(hSC,SERVICE_WIN32,SERVICE_STATE_ALL,pStatus, cbBufSize,@pcbBytesNeeded,@lpServicesReturned,@lpResumeHandle); pStatus := AllocMem(pcbBytesNeeded); try cbBufSize := pcbBytesNeeded; EnumServicesStatus(hSC,SERVICE_WIN32,SERVICE_STATE_ALL,pStatus, cbBufSize,@pcbBytesNeeded,@lpServicesReturned,@lpResumeHandle); pWork := pStatus; for i := 1 to lpServicesReturned do begin s := pWork.lpDisplayName; case pWork.ServiceStatus.dwCurrentState of SERVICE_CONTINUE_PENDING : s := s+' (wird fortgesetzt'; SERVICE_PAUSED : s := s+' (pausiert'; SERVICE_RUNNING: s := s+' (gestartet'; SERVICE_START_PENDING: s := s+' (wird gestartet'; SERVICE_STOP_PENDING: s := s+' (wird gestoppt'; SERVICE_STOPPED: s := s+' (gestoppt'; end; case pWork.ServiceStatus.dwServiceType of SERVICE_FILE_SYSTEM_DRIVER : s := s+', Dateitreiber)'; SERVICE_KERNEL_DRIVER : s := s+', Gerätetreiber)'; SERVICE_WIN32_OWN_PROCESS : s := s+', eigener Prozess)'; SERVICE_WIN32_SHARE_PROCESS: s := s+', teilt Prozess)' else s := s+')'; end; Memo1.Lines.Add(s); inc(pWork); end; finally if Assigned(pStatus) then begin FreeMem(pStatus,pcbBytesNeeded); end; end; finally CloseServiceHandle(hSC); end; end else RaiselastOSError();end;initializationbegin hLib := LoadLibrary('ADVAPI32.DLL'); if hLib <> 0 then begin @EnumServicesStatus := GetProcAddress(hLib,'EnumServicesStatusA'); if @EnumServicesStatus = nil then raise Exception.Create('EnumServicesStatusA'); @OpenSCManager := GetProcAddress(hLib,'OpenSCManagerA'); if @OpenSCManager = nil then raise Exception.Create('OpenSCManagerA'); end;end;finalizationbegin if hLib <> 0 then begin FreeLibrary(hLib); end;end;