Freigeben über


Ereignisablaufverfolgung in ADSI

Windows Server 2008 und Windows Vista führen die Ereignisablaufverfolgung in Active Directory Service Interfaces (ADSI) ein. Bestimmte Bereiche des ADSI LDAP-Anbieters verfügen über eine zugrunde liegende Implementierung, die komplex ist oder eine Abfolge von Schritten umfasst, die die Diagnose von Problemen erschwert. Um Anwendungsentwicklern bei der Problembehandlung zu helfen, wurde die Ereignisablaufverfolgung den folgenden Bereichen hinzugefügt:

Schemaanalyse und -download

Die IADs-Schnittstelle in ADSI erfordert, dass das LDAP-Schema auf dem Client zwischengespeichert wird, damit Attribute ordnungsgemäß gemarshallt werden können (wie im ADSI-Schemamodell beschrieben). Um dies zu erreichen, lädt ADSI das Schema für jeden Prozess (und für jeden LDAP-Server/jede LDAP-Domäne) in den Arbeitsspeicher, entweder aus einer Schemadatei (.sch), die auf dem lokalen Datenträger gespeichert ist, oder durch Herunterladen vom LDAP-Server. Unterschiedliche Prozesse auf demselben Clientcomputer verwenden das zwischengespeicherte Schema auf dem Datenträger, wenn es verfügbar und anwendbar ist.

Wenn das Schema nicht vom Datenträger oder Server abgerufen werden kann, verwendet ADSI ein hartcodiertes Standardschema. In diesem Fall können Attribute, die nicht Teil dieses Standardschemas sind, nicht gemarshallt werden, und ADSI gibt beim Abrufen dieser Attribute einen Fehler zurück. Dies kann durch eine Reihe von Faktoren verursacht werden, z. B. Probleme beim Analysieren des Schemas und unzureichende Berechtigungen zum Herunterladen des Schemas. Es ist oft schwierig zu bestimmen, warum ein bestimmtes Standardschema verwendet wird. Die Verwendung der Ereignisablaufverfolgung in diesem Bereich hilft, das Problem schneller zu diagnostizieren und zu beheben.

Ändern und Festlegen des Kennworts

ChangePassword und SetPassword verwenden mehrere Mechanismen, um den angeforderten Vorgang basierend auf der verfügbaren Konfiguration auszuführen (wie unter Festlegen und Ändern von Benutzerkennwörtern mit dem LDAP-Anbieter beschrieben). Wenn ChangePassword und SetPassword fehlschlagen, kann es schwierig sein, genau zu bestimmen, warum, und die Ereignisablaufverfolgung hilft bei der Behandlung von Problemen mit diesen Methoden.

ADSI-Bindungscache

ADSI versucht intern, LDAP-Verbindungen nach Möglichkeit wiederzuverwenden (siehe Verbindungszwischenspeicherung). Bei der Problembehandlung ist es hilfreich, nachzuverfolgen, ob eine neue Verbindung für die Kommunikation mit dem Server geöffnet wurde oder ob eine vorhandene Verbindung verwendet wurde. Es kann auch hilfreich sein, den Lebenszyklus des Verbindungscaches (manchmal auch als Bindungscache bezeichnet) und dessen Erstellung oder Schließen nachzuverfolgen und zu verfolgen, ob eine Verbindungsverweis erfolgt ist. Bei einer serverlosen Bindung ruft ADSI den DC-Locator auf, um einen Server für die Domäne des Benutzerkontexts auszuwählen. ADSI verwaltet dann einen Cache der Domänen-Server-Zuordnung für nachfolgende Verbindungen. Die Ereignisablaufverfolgung hilft bei der Nachverfolgung der Auswahl des Domänencontrollers und ist daher hilfreich bei der Behandlung von Verbindungsproblemen.

Aktivieren der Ablaufverfolgung und Starten einer Ablaufverfolgungssitzung

Um die ADSI-Ablaufverfolgung zu aktivieren, erstellen Sie den folgenden Registrierungsschlüssel:

HKEY_LOCAL_MACHINE\System\Currentcontrolset\Dienstleistungen\Adsi\Ablaufverfolgung\Processname

ProcessName ist der vollständige Name des Prozesses, den Sie nachverfolgen möchten, einschließlich seiner Erweiterung (z. B. "Svchost.exe"). Darüber hinaus können Sie einen optionalen Wert vom Typ DWORD namens PID in diesem Schlüssel platzieren. Es wird dringend empfohlen, diesen Wert festzulegen und somit nur einen bestimmten Prozess nachzuverfolgen. Andernfalls werden alle Instanzen der von ProcessName angegebenen Anwendung nachverfolgt.

Führen Sie dann den folgenden Befehl aus:

tracelog.exe -startsessionname **-guid #**provider_guid-ffilename-flagtraceFlags-leveltraceLevel

sessionname ist einfach ein beliebiger Bezeichner, der zur Bezeichnung der Ablaufverfolgungssitzung verwendet wird (Sie müssen später auf diesen Sitzungsnamen verweisen, wenn Sie die Ablaufverfolgungssitzung beenden). Die GUID für den ADSI-Nachverfolgungsanbieter lautet "7288c9f8-d63c-4932-a345-89d6b060174d". filename gibt die Protokolldatei an, in die Ereignisse geschrieben werden. traceFlags sollte einer der folgenden Werte sein:

Flag Wert
DEBUG_SCHEMA
0x00000001
DEBUG_CHANGEPWD
0x00000002
DEBUG_SETPWD
0x00000004
DEBUG_BINDCACHE
0x00000008

Diese Flags bestimmen, welche ADSI-Methoden gemäß der folgenden Tabelle nachverfolgt werden:

Flag Methode
DEBUG_SCHEMA
  • LdapGetSchema
  • GetSchemaInfoTime
  • LdapReadSchemaInfoFromServer
  • ProcessSchemaInfo
  • HelperReadLdapSchemaInfo
  • ProcessClassInfoArray
  • ReadSchemaInfoFromRegistry
  • StoreSchemaInfoFromRegistry
  • AttributeTypeDescription
  • ObjectClassDescription
  • DITContentRuleDescription
  • DirectoryString
  • DirectoryStrings
  • DITContentRuleDescription

DEBUG_CHANGEPWD
  • CADsUser::ChangePassword

DEBUG_SETPWD
  • CADsUser::SetPassword

DEBUG_BINDCACHE
  • GetServerBasedObject
  • GetServerLessBasedObject
  • GetGCDomainName
  • GetDefaultDomainName
  • GetUserDomainFlatName
  • BindCacheLookup
  • EquivalentPortNumbers
  • CanCredentialsBeReused
  • BindCacheAdd
  • BindCacheAddRef
  • AddReferralLink
  • CommonRemoveEntry
  • BindCacheDerefHelper
  • NotifyNewConnection
  • QueryForConnection
  • LdapOpenBindWithCredentials
  • LdapOpenBindWithDefaultCredentials

Sie können Flags kombinieren, indem Sie die entsprechenden Bits im argument traceFlags kombinieren. Wenn Sie beispielsweise die DEBUG_SCHEMA - und DEBUG_BINDCACHE-Flags angeben möchten, wäre der entsprechende traceFlags-Wert 0x00000009.

Schließlich sollte das TraceLevel-Flag einen der folgenden Werte aufweisen:

Flag Wert
TRACE_LEVEL_ERROR
0x00000002
TRACE_LEVEL_INFORMATION
0x00000004

TRACE_LEVEL_INFORMATION bewirkt, dass der Ablaufverfolgungsprozess alle Ereignisse erfasst, während TRACE_LEVEL_ERROR dazu führt, dass der Ablaufverfolgungsprozess nur Fehlerereignisse aufzeichnet.

Führen Sie den folgenden Befehl aus, um die Ablaufverfolgung zu beenden:

tracelog.exe -stopsessionname

Im vorherigen Beispiel ist sessionname derselbe Name wie der, der mit dem Befehl bereitgestellt wurde, der den Ablaufverfolgungsabschnitt gestartet hat.

Bemerkungen

Es ist effektiver, nur bestimmte Prozesse zu verfolgen, indem eine bestimmte PID angegeben wird, als alle Prozesse auf einem Computer zu verfolgen. Wenn Sie mehrere Anwendungen auf demselben Computer nachverfolgen müssen, kann sich dies auf die Leistung auswirken. es gibt erhebliche Debugausgaben in leistungsorientierten Abschnitten des Codes. Außerdem müssen Administratoren darauf achten, die Berechtigungen der Protokolldateien ordnungsgemäß festzulegen, wenn sie mehrere Prozesse nachverfolgen. Andernfalls kann jeder Benutzer die Ablaufverfolgungsprotokolle lesen, und andere Benutzer können Prozesse nachverfolgen, die sichere Informationen enthalten.

Angenommen, der Administrator richtet die Ablaufverfolgung für eine Anwendung "Test.exe" ein und gibt keine PID in der Registrierung an, um mehrere Instanzen des Prozesses zu verfolgen. Nun möchte ein anderer Benutzer die Anwendung "Secure.exe" nachverfolgen. Wenn die Ablaufverfolgungsprotokolldateien nicht ordnungsgemäß eingeschränkt sind, muss der Benutzer lediglich "Secure.exe" in "Test.exe" umbenennen, und es wird nachverfolgt. Im Allgemeinen empfiehlt es sich, während der Problembehandlung nur bestimmte Prozesse nachzuverfolgen und den Registrierungsschlüssel für die Ablaufverfolgung zu entfernen, sobald die Problembehandlung abgeschlossen ist.

Da die Aktivierung der Ereignisablaufverfolgung zusätzliche Protokolldateien erzeugt, sollten Administratoren die Größe der Protokolldateien sorgfältig überwachen. Fehlender Speicherplatz auf dem lokalen Computer kann zu einem Denial-of-Service führen.

Beispielszenarien

Szenario 1: Der Administrator sieht einen unerwarteten Fehler in einer Anwendung, die Kennwörter für Benutzerkonten festlegt, sodass er die folgenden Schritte ausführt, um das Problem mithilfe der Ereignisablaufverfolgung zu beheben.

  1. Schreiben Sie ein Skript, das das Problem reproduziert, und erstellen Sie den Registrierungsschlüssel.

    HKEY_LOCAL_MACHINE\System\Currentcontrolset\Dienstleistungen\Adsi\Ablaufverfolgung\cscript.exe

  2. Starten Sie eine Ablaufverfolgungssitzung, und legen Sie traceFlags mit dem folgenden Befehl auf 0x2 (DEBUG_CHANGEPASSWD) und traceLevel auf 0x4 (TRACE_LEVEL_INFORMATION) fest:

    tracelog.exe -start scripttrace -guid #7288c9f8-d63c-4932-a345-89d6b060174d -f .\adsi.etl -flag 0x2 -level 0x4

  3. Führen Sie cscript.exe mit ihrem Testskript aus, um das Problem zu reproduzieren, und beenden Sie dann die Ablaufverfolgungssitzung:

    tracelog.exe -stop scripttrace

  4. Löschen des Registrierungsschlüssels

    HKEY_LOCAL_MACHINE\System\Currentcontrolset\Dienstleistungen\Adsi\Ablaufverfolgung\cscript.exe

  5. Führen Sie das ETW-Tool Tracerpt.exe aus, um die Ablaufverfolgungsinformationen aus dem Protokoll zu analysieren:

    tracelog.exe -start scripttrace -guid #7288c9f8-d63c-4932-a345-89d6b060174d -f .\adsi.etl -flag 0x2 -level 0x4

Szenario 2: Der Administrator möchte die Schemaanalyse- und Downloadvorgänge in einer ASP-Anwendung namens w3wp.exe nachverfolgen, die bereits ausgeführt wird. Dazu führt der Administrator die folgenden Schritte aus:

  1. Erstellen des Registrierungsschlüssels

    HKEY_LOCAL_MACHINE\System\Currentcontrolset\Dienstleistungen\Adsi\Ablaufverfolgung\w3wp.exe

    Erstellen Sie innerhalb dieses Schlüssels einen Wert vom Typ DWORD mit dem Namen PID, und legen Sie ihn auf die Prozess-ID der instance w3wp.exe fest, die derzeit auf dem lokalen Computer ausgeführt wird.

  2. Anschließend erstellen sie eine Ablaufverfolgungssitzung und legen traceFlags auf 0x1 (DEBUG_SCHEMA) und traceLevel auf 0x4 (TRACE_LEVEL_INFORMATION) fest:

    tracelog.exe -start w3wptrace -guid #7288c9f8-d63c-4932-a345-89d6b060174d -f .\w3wp.etl -flag 0x1 -level 0x4

  3. Reproduzieren Sie den Vorgang, für den eine Problembehandlung erforderlich ist.

  4. Beenden Sie die Ablaufverfolgungssitzung:

    tracelog.exe -stop w3wptrace

  5. Löschen Sie den Registrierungsschlüssel HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\adsi\Tracing\w3wp.exe.

  6. Führen Sie das ETW-Tool tracerpt.exe aus, um die Ablaufverfolgungsinformationen aus dem Protokoll zu analysieren:

    tracerpt.exe .\w3wp.etl -o -report