vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
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:  3.318 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    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 3.318 mal aufgerufen.

    nach obenzurück
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 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