vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2014
 
zurück
Rubrik: Windows/System22.03.05
EnumServicesStatus-Funktion

Diese Funktion ermittelt Services und deren Status in einer geöffneten Service-Datenbank.

Betriebssystem:  WinNT 3.1, WinNT 3.1, Win2000Views:  2.986 

Deklaration:

Declare Function EnumServicesStatus Lib "advapi32.dll" _
  Alias "EnumServicesStatusA" ( _
  ByVal hSCManager As Long, _
  ByVal dwServiceType As Long, _
  ByVal dwServiceState As Long, _
  lpServices As Any, _
  ByVal cbBufSize As Long, _
  pcbBytesNeeded As Long, _
  lpServicesReturned As Long, _
  lpResumeHandle As Long) As Long

Beschreibung:
Diese Funktion ermittelt Services und deren Status in einer geöffneten Service-Datenbank.

Parameter:
hSCManagerErwartet das Handle einer geöffneten Service-Datenbank, die mittels der OpenSCManager-Funktion geöffnet werden kann. Für den erfolgreichen Aufruf der Funktion muss der Prozess dieerforderlichen Zugriffsrechte besitzen.
dwServiceTypeErwartet eine oder eine Kombination aus beiden der folgenden Konstanten, die beschreiben welcheArten der Services enumeriert werden sollen.
dwServiceStateErwartet den Status der zu enumerierenden Services. Es werden dann nur Services enumeriert, die den angegebenen Status besitzen.
lpServicesErwartet Puffer, der aus einem Array von ENUM_SERVICE_STATUS-Strukturen besteht. Dieser Puffer muss genügendArrayfelder besitzen, um alle gefundenen Serviceinformationen zu empfangen.
cbBufSizeErwartet die Größe des übergebenen Puffers in Bytes.
pcbBytesNeededErwartet eineLong-Variable, die mit der Anzahl der benötigten Bytes gefüllt wird, die der Puffer groß sein muss um alle Informationen zu erhalten.
lpServicesReturnedErwartet eineLong-Variable, die mit der Anzahl der in den Puffer kopierten Serviceinformationen gefüllt wird.
lpResumeHandleErwartet eineLong-Variable, die mit dem Handle des Starteintrages gefüllt ist, an dem die Enumeration begonnen werden soll. Enthält dieseVariable den Wert "0", so wird am Anfang der Datenbank angefangen zu enumerieren. Schlägt die Funktion fehl und gibt die GetLastError-Funktionden Fehler "ERROR_MORE_DATA" zurück, so wird diese Variable mit dem Handle des nächsten zu enumerierenden Datensatzes gefüllt.

dwServiceType Konstanten:

Const SERVICE_KERNEL_DRIVER = &H1
' SERVICE_DRIVER Konstante
 
Const SERVICE_FILE_SYSTEM_DRIVER = &H2
' SERVICE_DRIVER Konstante
 
Const SERVICE_RECOGNIZER_DRIVER = &H8
' SERVICE_DRIVER Konstante
 
Const SERVICE_DRIVER =  ( SERVICE_KERNEL_DRIVER  Or  SERVICE_FILE_SYSTEM_DRIVER  Or  SERVICE_RECOGNIZER_DRIVER )
' Es sollen Treiber Services enumeriert werden
 
Const SERVICE_WIN32_OWN_PROCESS = &H10
' SERVICE_WIN32 Konstante
 
Const SERVICE_WIN32_SHARE_PROCESS = &H20
' SERVICE_WIN32 Konstante
 
Const SERVICE_WIN32 = (SERVICE_WIN32_OWN_PROCESS Or SERVICE_WIN32_SHARE_PROCESS)
' Es sollen Anwendungs-Services enumeriert werden

Rückgabewert:
Ist die Funktion erfolgreich, so ist die Rückgabe ein Wert "ungleich 0", andernfalls wird derWert "0" zurückgegeben. Für erweiterte Fehlerinformationen können Sie die GetLastError-Funktion aufrufen.

Beispiel:

Private Declare Function OpenSCManager Lib "advapi32.dll" _
  Alias "OpenSCManagerA" ( _
  ByVal lpMachineName As String, _
  ByVal lpDatabaseName As String, _
  ByVal dwDesiredAccess As Long) As Long
Private Declare Function EnumServicesStatus Lib "advapi32.dll" _
  Alias "EnumServicesStatusA" ( _
  ByVal hSCManager As Long, _
  ByVal dwServiceType As Long, _
  ByVal dwServiceState As Long, _
  lpServices As Any, _
  ByVal cbBufSize As Long, _
  pcbBytesNeeded As Long, _
  lpServicesReturned As Long, _
  lpResumeHandle As Long) As Long
Private Declare Function CloseServiceHandle Lib "advapi32.dll" ( _
  ByVal hSCObject As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory"  ( _
  Destination As Any, _
  Source As Any, _
  ByVal Length As Long)
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Declare Function lstrcpy Lib "kernel32" _
  Alias "lstrcpyA" ( _
  lpString1  As Any, _
  lpString2 As Any) As Long
 
Private Type SERVICE_STATUS
  dwServiceType As Long
  dwCurrentState As Long
  dwControlsAccepted As Long
  dwWin32ExitCode As Long
  dwServiceSpecificExitCode As Long
  dwCheckPoint As Long
  dwWaitHint As Long
End Type
 
Private Type ENUM_SERVICE_STATUS
  lpServiceName As Long
  lpDisplayName As Long
  ServiceStatus As SERVICE_STATUS
End Type
 
' OpenSCManager lpDatabaseName-Konstante
Private Const SERVICES_ACTIVE_DATABASE = "ServicesActive" ' Standarddatenbank
 
' OpenSCManager dwDesiredAccess-Konstanten
Private Const SC_MANAGER_CONNECT = &H1 ' (Autorisierte Benutzer, Lokales System, Administrator) 
' Erlaubt das Verbinden mit der Datenbank
Private Const SC_MANAGER_ENUMERATE_SERVICE = &H4 ' (Autorisierte Benutzer, Lokales System, Administrator) 
' Erlaubt das Enumerieren der Datenbank
Private Const SC_MANAGER_QUERY_LOCK_STATUS = &H10 ' (Autorisierte Benutzer, Lokales System, Administrator) 
' Erlaubt die Abfrage von gelockten Datensätzen 
Private Const SC_MANAGER_MODIFY_BOOT_CONFIG = &H20 ' SC_MANAGER_ALL_ACCESS Konstante 
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000 ' SC_MANAGER_ALL_ACCESS Konstante 
Private Const SC_MANAGER_CREATE_SERVICE = &H2 ' SC_MANAGER_ALL_ACCESS Konstante 
Private Const SC_MANAGER_LOCK = &H8 ' SC_MANAGER_ALL_ACCESS Konstante
Private Const SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or  _
  SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or  _
  SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or  _
  SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)  _
' (Administrator) Erlaubt alle Zugriffe auf die Datenbank
Private Const READ_CONTROL = &H20000 ' STANDARD_RIGHTS_READ Konstante
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL) ' Erlaubt Standard-Lesezugriffe 
 
' EnumServicesStatus dwServiceType-Konstanten
Private Const SERVICE_KERNEL_DRIVER = &H1 ' SERVICE_DRIVER Konstante
Private Const SERVICE_FILE_SYSTEM_DRIVER = &H2 ' SERVICE_DRIVER Konstante
Private Const SERVICE_RECOGNIZER_DRIVER = &H8 ' SERVICE_DRIVER Konstante
Private Const SERVICE_DRIVER = (SERVICE_KERNEL_DRIVER Or  _
SERVICE_FILE_SYSTEM_DRIVER Or SERVICE_RECOGNIZER_DRIVER) ' Es sollen Treiber Services enumeriert werden
Private Const SERVICE_WIN32_OWN_PROCESS = &H10 ' SERVICE_WIN32 Konstante
Private Const SERVICE_WIN32_SHARE_PROCESS = &H20 ' SERVICE_WIN32 Konstante
Private Const SERVICE_WIN32 = (SERVICE_WIN32_OWN_PROCESS Or  _
SERVICE_WIN32_SHARE_PROCESS) ' Es sollen Anwendungs-Services enumeriert werden 
 
' EnumServicesStatus dwServiceState-Konstanten
Private Const SERVICE_ACTIVE = &H1 ' Der Service muss aktiv sein
Private Const SERVICE_INACTIVE = &H2 ' Der Service muss inaktiv sein
Private Const SERVICE_STATE_ALL = (SERVICE_ACTIVE Or SERVICE_INACTIVE) ' Der Service kann aktiv oder inaktiv sein
 
' eine der Standard Fehlerkonstanten
Private Const ERROR_MORE_DATA = 234 ' Es sind noch Daten verfügbar
' Alle registrierten Services ermitteln
Private Sub Form_Load()
  Dim hSManager As Long, Retval As Long, i As Integer
  Dim BufferSize As Long, CountServices As Long, hNextService As Long
  Dim Buffer() As ENUM_SERVICE_STATUS, TmpStr As String, TmpStr2 As String 
 
  ' Datenbank mit registrierten Services öffnen
  hSManager = OpenSCManager(vbNullString, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ENUMERATE_SERVICE) 
 
  ' Benötigte Puffergröße ermitteln
  Retval = EnumServicesStatus(hSManager, SERVICE_WIN32,  _
  SERVICE_STATE_ALL, ByVal 0&, 0&, BufferSize, 0&, 0&)
  If GetLastError << 234 And Retval = 0 Then
    MsgBox "Die benötigte Puffergröße konnte nicht ermittelt werden."
    Exit Sub
  End If
 
  ' Puffer einrichten und Daten ermitteln
  ReDim Buffer(BufferSize / Len(Buffer(0)))
  Retval = EnumServicesStatus(hSManager, SERVICE_WIN32,  _
  SERVICE_STATE_ALL, Buffer(0), Len(Buffer(0)) * (UBound(Buffer) + 1),  _
  BufferSize, CountServices, hNextService)
 
  ' Servicenamen ausgeben
  For i = 0 To CountServices - 1
    TmpStr = String(257, vbNullChar)
    Call lstrcpy(ByVal TmpStr, ByVal Buffer(i).lpServiceName)
    TmpStr = Trim$(Left$(TmpStr, InStr(1, TmpStr, vbNullChar) - 1))
 
    TmpStr2 = String(257, vbNullChar)
    Call lstrcpy(ByVal TmpStr2, ByVal Buffer(i).lpDisplayName)
    TmpStr2 = Trim$(Left$(TmpStr2, InStr(1, TmpStr2, vbNullChar) - 1))
 
    Debug.Print "Service: " & TmpStr & " (" & TmpStr2 & ")"
  Next i
 
  ' Servicedatenbank schließen
  Call CloseServiceHandle(hSManager)
End Sub

Diese Seite wurde bereits 2.986 mal aufgerufen.

nach obenzurück
 
   

Druckansicht Druckansicht Copyright ©2000-2014 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.

Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel