Dienstdatensatzliste

Da jeder Diensteintrag aus der Datenbank der installierten Dienste gelesen wird, erstellt der SCM einen Dienstdatensatz für den Dienst. Ein Dienstdatensatz umfasst Folgendes:

  • Dienstname
  • Starttyp (Autostart oder Bedarfsstart)
  • Dienst status (siehe SERVICE_STATUS-Struktur)
    Typ
    Aktueller Status
    Zulässige Steuerungscodes
    Exitcode
    Wartehinweis
  • Zeiger auf die Abhängigkeitsliste

Der Benutzername und das Kennwort eines Kontos werden zum Zeitpunkt der Installation des Diensts angegeben. Der SCM speichert den Benutzernamen in der Registrierung und das Kennwort in einem sicheren Teil der lokalen Sicherheitsbehörde (LSA). Der Systemadministrator kann Konten mit Kennwörtern erstellen, die nie ablaufen. Alternativ kann der Systemadministrator Konten mit Ablaufkennwörtern erstellen und die Konten verwalten, indem er die Kennwörter in regelmäßigen Abständen ändert.

Der SCM speichert zwei Kopien des Kennworts eines Benutzerkontos, ein aktuelles Kennwort und ein Sicherungskennwort. Das bei der erstmaligen Installation des Diensts angegebene Kennwort wird als aktuelles Kennwort gespeichert, und das Sicherungskennwort wird nicht initialisiert. Wenn der SCM versucht, den Dienst im Sicherheitskontext des Benutzerkontos auszuführen, verwendet er das aktuelle Kennwort. Wenn das aktuelle Kennwort erfolgreich verwendet wurde, wird es auch als Sicherungskennwort gespeichert. Wenn das Kennwort mit der ChangeServiceConfig-Funktion oder dem Dienst-Systemsteuerungsprogramm geändert wird, wird das neue Kennwort als aktuelles Kennwort und das vorherige Kennwort als Sicherungskennwort gespeichert. Wenn der SCM versucht, den Dienst zu starten, und das aktuelle Kennwort fehlschlägt, wird das Sicherungskennwort verwendet. Wenn das Sicherungskennwort erfolgreich verwendet wurde, wird es als aktuelles Kennwort gespeichert.

Der SCM aktualisiert den Dienst status, wenn ein Dienst ihn mit der SetServiceStatus-Funktion status Benachrichtigungen sendet. Der SCM verwaltet die status eines Treiberdiensts, indem er das E/A-System abfragt, anstatt wie von einem Dienst status Benachrichtigungen zu empfangen.

Ein Dienst kann zusätzliche Typinformationen registrieren, indem er die SetServiceBits-Funktion aufruft . Die Funktionen NetServerGetInfo und NetServerEnum rufen die unterstützten Diensttypen ab.