Partager via


Suivi d’événements dans ADSI

Windows Server 2008 et Windows Vista introduisent le suivi d’événements dans les interfaces de service Active Directory (ADSI). Certaines zones du fournisseur LDAP ADSI ont une implémentation sous-jacente qui est complexe ou qui implique une séquence d’étapes qui rend difficile le diagnostic des problèmes. Pour aider les développeurs d’applications à résoudre les problèmes, le suivi d’événements a été ajouté aux domaines suivants :

Analyse et téléchargement de schémas

L’interface IADs dans ADSI nécessite que le schéma LDAP soit mis en cache sur le client afin que les attributs puissent être marshalés correctement (comme décrit dans le modèle de schéma ADSI). Pour ce faire, ADSI charge le schéma pour chaque processus (et pour chaque serveur/domaine LDAP) en mémoire à partir d’un fichier de schéma (.sch) enregistré sur le disque local ou en le téléchargeant à partir du serveur LDAP. Différents processus sur le même ordinateur client utilisent le schéma mis en cache sur le disque s’il est disponible et applicable.

Si le schéma ne peut pas être obtenu à partir du disque ou du serveur, ADSI utilise un schéma par défaut codé en dur. Lorsque cela se produit, les attributs qui ne font pas partie de ce schéma par défaut ne peuvent pas être marshalés et ADSI retourne une erreur lors de la récupération de ces attributs. Plusieurs facteurs peuvent provoquer ce problème, notamment des problèmes d’analyse du schéma et des privilèges insuffisants pour télécharger le schéma. Il est souvent difficile de déterminer pourquoi un certain schéma par défaut est utilisé. L’utilisation du suivi d’événements dans cette zone permet de diagnostiquer plus rapidement le problème et de le résoudre.

Modification et définition du mot de passe

ChangePassword et SetPassword utilisent plusieurs mécanismes pour effectuer l’opération demandée en fonction de la configuration disponible (comme décrit dans Définition et modification des mots de passe utilisateur avec le fournisseur LDAP). Lorsque ChangePassword et SetPassword échouent, il peut être difficile de déterminer exactement pourquoi, et le suivi d’événements permet de résoudre les problèmes liés à ces méthodes.

Cache de liaison ADSI

ADSI tente en interne de réutiliser les connexions LDAP dans la mesure du possible (voir Mise en cache des connexions). Lors de la résolution des problèmes, il est utile de déterminer si une nouvelle connexion a été ouverte pour la communication avec le serveur ou si une connexion existante a été utilisée. Il peut également être utile de suivre le cycle de vie du cache de connexion (parfois appelé cache de liaison) et sa création ou fermeture, et si une référence de connexion a eu lieu. Dans le cas d’une liaison serverless, ADSI appelle le localisateur de contrôleur de domaine pour sélectionner un serveur pour le domaine du contexte de l’utilisateur. ADSI gère ensuite un cache du mappage domaine-serveur pour les connexions suivantes. Le suivi d’événements permet de suivre la sélection du contrôleur de domaine et est donc utile pour résoudre les problèmes liés à la connexion.

Activation du suivi et démarrage d’une session de suivi

Pour activer le suivi ADSI, créez la clé de Registre suivante :

HKEY_LOCAL_MACHINE\Système\Currentcontrolset\Services\Adsi\Traçage\ProcessName

ProcessName est le nom complet du processus que vous souhaitez suivre, y compris son extension (par exemple, « Svchost.exe »). En outre, vous pouvez placer une valeur facultative de type DWORD nommée PID dans cette clé. Il est vivement recommandé de définir cette valeur et donc de suivre uniquement un processus particulier. Sinon, toutes les instances de l’application spécifiées par ProcessName seront suivies.

Exécutez ensuite la commande suivante :

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

sessionname est simplement un identificateur arbitraire utilisé pour étiqueter la session de suivi (vous devrez faire référence à ce nom de session ultérieurement lorsque vous arrêterez la session de suivi). Le GUID du fournisseur de suivi ADSI est « 7288c9f8-d63c-4932-a345-89d6b060174d ». filename spécifie le fichier journal dans lequel les événements seront écrits. traceFlags doit avoir l’une des valeurs suivantes :

Indicateur Valeur
DEBUG_SCHEMA
0x00000001
DEBUG_CHANGEPWD
0x00000002
DEBUG_SETPWD
0x00000004
DEBUG_BINDCACHE
0x00000008

Ces indicateurs déterminent les méthodes ADSI qui seront tracées, selon le tableau suivant :

Indicateur Méthode
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

Vous pouvez combiner des indicateurs en combinant les bits appropriés dans l’argument traceFlags . Par exemple, pour spécifier les indicateurs DEBUG_SCHEMA et DEBUG_BINDCACHE , la valeur traceFlags appropriée est 0x00000009.

Enfin, l’indicateur traceLevel doit avoir l’une des valeurs suivantes :

Indicateur Valeur
TRACE_LEVEL_ERROR
0x00000002
TRACE_LEVEL_INFORMATION
0x00000004

TRACE_LEVEL_INFORMATION entraîne l’enregistrement de tous les événements par le processus de suivi, tandis que TRACE_LEVEL_ERROR entraîne l’enregistrement des événements d’erreur uniquement par le processus de suivi.

Pour arrêter le suivi, exécutez la commande suivante :

tracelog.exe -stopnom de session

Dans l’exemple précédent, sessionname est le même nom que celui fourni avec la commande qui a démarré la section de suivi.

Notes

Il est plus efficace de suivre uniquement des processus spécifiques en spécifiant un PID particulier que de suivre tous les processus sur un ordinateur. Si vous avez besoin de suivre plusieurs applications sur la même machine, il peut y avoir un impact sur les performances ; il existe une sortie de débogage importante dans les sections orientées performances du code. En outre, les administrateurs doivent veiller à définir correctement les autorisations des fichiers journaux lors du suivi de plusieurs processus ; dans le cas contraire, n’importe quel utilisateur peut lire les journaux de suivi, et d’autres utilisateurs pourront suivre les processus qui contiennent des informations sécurisées.

Par exemple, supposons que l’administrateur configure le suivi pour une application « Test.exe » et ne spécifie pas de PID dans le Registre pour suivre plusieurs instances du processus. Un autre utilisateur souhaite maintenant suivre l’application « Secure.exe ». Si les fichiers journaux de suivi ne sont pas correctement restreints, il suffit à l’utilisateur de renommer « Secure.exe » en « Test.exe », et il sera suivi. En général, il est préférable de suivre uniquement des processus spécifiques lors de la résolution des problèmes, et de supprimer la clé de Registre de suivi dès que la résolution des problèmes est effectuée.

Étant donné que l’activation du suivi d’événements génère des fichiers journaux supplémentaires, les administrateurs doivent surveiller attentivement la taille des fichiers journaux ; un manque d’espace disque sur l’ordinateur local peut entraîner un déni de service.

Exemples de scénarios

Scénario 1 : L’administrateur voit une erreur inattendue dans une application qui définit des mots de passe pour les comptes d’utilisateur, de sorte qu’il effectue les étapes suivantes pour résoudre le problème à l’aide du suivi d’événements.

  1. Écrire un script qui reproduit le problème et créer la clé de Registre

    HKEY_LOCAL_MACHINE\Système\Currentcontrolset\Services\Adsi\Traçage\cscript.exe

  2. Démarrez une session de suivi, en définissant traceFlags sur 0x2 (DEBUG_CHANGEPASSWD) et traceLevel sur 0x4 (TRACE_LEVEL_INFORMATION), à l’aide de la commande suivante :

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

  3. Exécutez cscript.exe avec leur script de test pour reproduire le problème, puis terminez la session de suivi :

    tracelog.exe -stop scripttrace

  4. Supprimer la clé de Registre

    HKEY_LOCAL_MACHINE\Système\Currentcontrolset\Services\Adsi\Traçage\cscript.exe

  5. Exécutez l’outil ETW Tracerpt.exe pour analyser les informations de suivi à partir du journal :

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

Scénario 2 : l’administrateur souhaite suivre les opérations d’analyse et de téléchargement de schéma dans une application ASP nommée w3wp.exe déjà en cours d’exécution. Pour ce faire, l’administrateur effectue les étapes suivantes :

  1. Créer la clé de Registre

    HKEY_LOCAL_MACHINE\Système\Currentcontrolset\Services\Adsi\Traçage\w3wp.exe

    et à l’intérieur de cette clé, créez une valeur de type DWORD nommée PID et définissez-la sur l’ID de processus du instance de w3wp.exe en cours d’exécution sur l’ordinateur local.

  2. Ensuite, ils créent une session de suivi, en définissant traceFlags sur 0x1 (DEBUG_SCHEMA) et traceLevel sur 0x4 (TRACE_LEVEL_INFORMATION) :

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

  3. Reproduire l’opération qui nécessite une résolution des problèmes.

  4. Terminez la session de suivi :

    tracelog.exe -stop w3wptrace

  5. Supprimez la clé de Registre HKEY_LOCAL_MACHINE\système\CurrentControlSet\Services\adsi\Tracing\w3wp.exe.

  6. Exécutez l’outil ETW tracerpt.exe pour analyser les informations de suivi à partir du journal :

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