Seguimiento de eventos en ADSI

Windows Server 2008 y Windows Vista presentan el seguimiento de eventos en las interfaces de servicio de Active Directory (ADSI). Algunas áreas del proveedor LDAP adsi tienen una implementación subyacente compleja o que implica una secuencia de pasos que dificulta el diagnóstico de problemas. Para ayudar a los desarrolladores de aplicaciones a solucionar problemas, se ha agregado seguimiento de eventos a las siguientes áreas:

Análisis y descarga de esquemas

La interfaz de LOS IAD en ADSI requiere que el esquema LDAP se almacene en caché en el cliente para que los atributos se puedan serializar correctamente (como se describe en el modelo de esquema ADSI). Para ello, ADSI carga el esquema para cada proceso (y para cada servidor o dominio LDAP) en la memoria desde un archivo de esquema (.sch) que se guarda en el disco local o lo descarga desde el servidor LDAP. Los distintos procesos de la misma máquina cliente usan el esquema almacenado en caché en el disco si está disponible y aplicable.

Si el esquema no se puede obtener del disco o del servidor, ADSI usa un esquema predeterminado codificado de forma predeterminada. Cuando esto ocurre, los atributos que no forman parte de este esquema predeterminado no se pueden serializar y ADSI devuelve un error al recuperar estos atributos. Varios factores podrían hacer que esto suceda, incluidos problemas al analizar el esquema y privilegios insuficientes para descargar el esquema. A menudo es difícil determinar por qué se usa un determinado esquema predeterminado. El uso del seguimiento de eventos en esta área le ayudará a diagnosticar más rápidamente el problema y corregirlo.

Cambiar y establecer la contraseña

ChangePassword y SetPassword emplean más de un mecanismo para realizar la operación solicitada en función de la configuración disponible (como se describe en Establecer y cambiar contraseñas de usuario con el proveedor LDAP). Cuando se produce un error en ChangePassword y SetPassword , puede ser difícil determinar exactamente por qué y el seguimiento de eventos le ayudará a solucionar problemas con estos métodos.

Caché de enlace adsi

ADSI intenta reutilizar internamente las conexiones LDAP siempre que sea posible (consulte Almacenamiento en caché de conexiones). Al solucionar problemas, resulta útil realizar un seguimiento de si se abrió una nueva conexión para la comunicación con el servidor o si se usó una conexión existente. También puede ser útil realizar un seguimiento del ciclo de vida de la memoria caché de conexión (a veces denominada caché de enlace) y su creación o cierre, y si se realizó una referencia de conexión. En el caso de un enlace sin servidor, ADSI llama al localizador de dc para seleccionar un servidor para el dominio del contexto del usuario. A continuación, ADSI mantiene una memoria caché de la asignación de servidor de dominio para las conexiones posteriores. Seguimiento de eventos ayuda a realizar un seguimiento de la selección del controlador de dominio y, por tanto, resulta útil para solucionar problemas relacionados con la conexión.

Habilitación del seguimiento e inicio de una sesión de seguimiento

Para activar el seguimiento adsi, cree la siguiente clave del Registro:

HKEY_LOCAL_MACHINE\Sistema\Currentcontrolset\Servicios\Adsi\Rastreo\ProcessName

ProcessName es el nombre completo del proceso que desea rastrear, incluida su extensión (por ejemplo, "Svchost.exe"). Además, puede colocar un valor opcional de tipo DWORD denominado PID en esta clave. Se recomienda encarecidamente establecer este valor y, por tanto, realizar un seguimiento solo de un proceso determinado. De lo contrario, se realizará un seguimiento de todas las instancias de la aplicación especificada por ProcessName .

A continuación, ejecute el siguiente comando:

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

sessionname es simplemente un identificador arbitrario que se usa para etiquetar la sesión de seguimiento (tendrá que hacer referencia a este nombre de sesión más adelante cuando detenga la sesión de seguimiento). El GUID del proveedor de seguimiento ADSI es "7288c9f8-d63c-4932-a345-89d6b060174d". filename especifica el archivo de registro en el que se escribirán los eventos. traceFlags debe ser uno de los siguientes valores:

Marca Value
DEBUG_SCHEMA
0x00000001
DEBUG_CHANGEPWD
0x00000002
DEBUG_SETPWD
0x00000004
DEBUG_BINDCACHE
0x00000008

Estas marcas determinan qué métodos ADSI se rastrearán, según la tabla siguiente:

Marca Método
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

Puede combinar marcas combinando los bits adecuados en el argumento traceFlags . Por ejemplo, para especificar las marcas DEBUG_SCHEMA y DEBUG_BINDCACHE , el valor traceFlags adecuado sería 0x00000009.

Por último, la marca traceLevel debe ser uno de los siguientes valores:

Marca Value
TRACE_LEVEL_ERROR
0x00000002
TRACE_LEVEL_INFORMATION
0x00000004

TRACE_LEVEL_INFORMATION hace que el proceso de seguimiento registre todos los eventos, mientras que TRACE_LEVEL_ERROR hace que el proceso de seguimiento registre solo eventos de error.

Para finalizar el seguimiento, ejecute el siguiente comando:

tracelog.exe -stopsessionname

En el ejemplo anterior, sessionname es el mismo nombre que el que se proporcionó con el comando que inició la sección de seguimiento.

Comentarios

Es más eficaz realizar un seguimiento de solo procesos específicos especificando un PID determinado que realizar un seguimiento de todos los procesos de un equipo. Si necesita realizar un seguimiento de varias aplicaciones en la misma máquina, podría haber un impacto en el rendimiento; hay una salida de depuración sustancial en secciones orientadas al rendimiento del código. Además, los administradores deben tener cuidado de establecer correctamente los permisos de los archivos de registro al realizar el seguimiento de varios procesos; de lo contrario, es posible que cualquier usuario pueda leer los registros de seguimiento y otros usuarios podrán realizar un seguimiento de los procesos que contienen información segura.

Por ejemplo, suponga que el administrador configura el seguimiento de una aplicación "Test.exe" y no especifica un PID en el registro para realizar un seguimiento de varias instancias del proceso. Ahora otro usuario quiere realizar un seguimiento de la aplicación "Secure.exe". Si los archivos de registro de seguimiento no están restringidos correctamente, todo lo que el usuario debe hacer es cambiar el nombre de "Secure.exe" a "Test.exe" y se realizará un seguimiento. En general, es mejor realizar un seguimiento de solo procesos específicos durante la solución de problemas y quitar la clave del Registro de seguimiento en cuanto se realice la solución de problemas.

Dado que habilitar el seguimiento de eventos producirá archivos de registro adicionales, los administradores deben supervisar cuidadosamente los tamaños de los archivos de registro; La falta de espacio en disco en el equipo local puede provocar una denegación de servicio.

Escenarios de ejemplo

Escenario 1: el administrador ve un error inesperado en una aplicación que establece contraseñas para cuentas de usuario, por lo que seguiría los pasos siguientes para corregir el problema mediante el seguimiento de eventos.

  1. Escriba un script que reproduzca el problema y cree la clave del Registro.

    HKEY_LOCAL_MACHINE\Sistema\Currentcontrolset\Servicios\Adsi\Rastreo\cscript.exe

  2. Inicie una sesión de seguimiento, establezca traceFlags en 0x2 (DEBUG_CHANGEPASSWD) y traceLevel en 0x4 (TRACE_LEVEL_INFORMATION), con el siguiente comando:

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

  3. Ejecute cscript.exe con su script de prueba para reproducir el problema y, a continuación, finalice la sesión de seguimiento:

    tracelog.exe -stop scripttrace

  4. Eliminación de la clave del Registro

    HKEY_LOCAL_MACHINE\Sistema\Currentcontrolset\Servicios\Adsi\Rastreo\cscript.exe

  5. Ejecute la herramienta ETW Tracerpt.exe para analizar la información de seguimiento del registro:

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

Escenario 2: el administrador quiere realizar un seguimiento de las operaciones de análisis y descarga de esquemas en una aplicación ASP denominada w3wp.exe que ya se está ejecutando. Para ello, el administrador realizaría los pasos siguientes:

  1. Creación de la clave del Registro

    HKEY_LOCAL_MACHINE\Sistema\Currentcontrolset\Servicios\Adsi\Rastreo\w3wp.exe

    y dentro de esa clave, cree un valor de tipo DWORD denominado PID y establézcalo en el identificador de proceso de la instancia de w3wp.exe que se ejecuta actualmente en el equipo local.

  2. A continuación, crean una sesión de seguimiento y establecen traceFlags en 0x1 (DEBUG_SCHEMA) y traceLevel en 0x4 (TRACE_LEVEL_INFORMATION):

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

  3. Reproduzca la operación que necesita solucionar problemas.

  4. Finalice la sesión de seguimiento:

    tracelog.exe -stop w3wptrace

  5. Elimine la clave del Registro HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\adsi\Tracing\w3wp.exe.

  6. Ejecute la herramienta ETW tracerpt.exe para analizar la información de seguimiento del registro:

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