vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Windows/System22.03.05
CloseServiceHandle-Funktion

Diese Funktion schließt das Handle einer zuvor geöffneten Servicedatenbank oder eines Serviceobjektes und gibt die Ressourcen wieder frei.

Betriebssystem:  WinNT 3.1, WinNT 3.1, Win2000Views:  7.543 

Deklaration:

Declare Function CloseServiceHandle Lib "advapi32.dll" ( _
  ByVal hSCObject As Long) As Long

Beschreibung:
Diese Funktion schließt das Handle einer zuvor geöffneten Servicedatenbank oder eines Serviceobjektes und gibt die Ressourcen wieder frei.

Parameter:
hSCObjectErwartet das Handle eines geöffneten Serviceobjektes oder einer geöffnetenServicedatenbank die mittels der OpenSCManager-Funktion geöffnet wurde.

Rückgabewert:
Ist die Funktion erfolgreich, so wird ein Wert "0" zurückgegeben, andernfallsein Wert "ungleich 0". 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 7.543 mal aufgerufen.

nach obenzurück
 
   

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