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 |
|
DEBUG_CHANGEPWD |
|
DEBUG_SETPWD |
|
DEBUG_BINDCACHE |
|
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.
Schreiben Sie ein Skript, das das Problem reproduziert, und erstellen Sie den Registrierungsschlüssel.
HKEY_LOCAL_MACHINE\System\Currentcontrolset\Dienstleistungen\Adsi\Ablaufverfolgung\cscript.exe
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
Führen Sie cscript.exe mit ihrem Testskript aus, um das Problem zu reproduzieren, und beenden Sie dann die Ablaufverfolgungssitzung:
tracelog.exe -stop scripttrace
Löschen des Registrierungsschlüssels
HKEY_LOCAL_MACHINE\System\Currentcontrolset\Dienstleistungen\Adsi\Ablaufverfolgung\cscript.exe
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:
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.
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
Reproduzieren Sie den Vorgang, für den eine Problembehandlung erforderlich ist.
Beenden Sie die Ablaufverfolgungssitzung:
tracelog.exe -stop w3wptrace
Löschen Sie den Registrierungsschlüssel HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\adsi\Tracing\w3wp.exe.
Führen Sie das ETW-Tool tracerpt.exe aus, um die Ablaufverfolgungsinformationen aus dem Protokoll zu analysieren:
tracerpt.exe .\w3wp.etl -o -report
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für