2009-06-08 4 views
5

Escribo al windows event log usando C#. Puedo establecer todos los campos visibles en la herramienta "Administración de equipos" de mmc.exe, excepto en el campo Usuario.¿Cómo hacer que EventLog registre el nombre de usuario en el Registro de eventos de la ventana?

La aplicación cliente es ASP.NET y utiliza la autenticación de formularios.

public static void WriteOnce() 
{ 
    EventLog log = new EventLog("MyApp"); 
    if (!EventLog.SourceExists("MySource")) 
    { 
     EventSourceCreationData data = new EventSourceCreationData("MySource", "MyApp"); 
     EventLog.CreateEventSource(data); 
    } 
    log.Source = "MySource"; 
    log.WriteEntry("Hello World", EventLogEntryType.Information,123,456,new byte[]{1,2,3}); 
} 

ACTUALIZACIÓN: Que yo sepa, en ASP.NET incluso si se define la identidad suplantación = true & de autenticación = ventanas y todavía ningún usuario.

También revisé, en una aplicación de consola, sin usuario.

Respuesta

0

Encontré una entrada de blog que explica cómo hacerlo, aunque no parece haber una manera completamente administrada para hacerlo. Para capturar la identificación del usuario, debe usar llamadas de método nativo/pinvoke.

http://www.infosysblogs.com/microsoft/2007/09/logging_events_with_user_detai_1.html

Para lo anterior, se registra el usuario como ASPNET o servicios de red, o el usuario conectado para aplicaciones de consola. La llamada api toma un parámetro de puntero a un SID. No intenté ver si la suplantación era posible.

JPucket puede estar en lo cierto, la única forma de obtener el ID de un usuario autenticado en el registro de eventos del sistema es a través del campo de mensaje.

2

Bueno, el usuario es el usuario actual en el que se está ejecutando su AppDomain. Esto no se puede configurar y Windows no le permitirá "falsificar" a otro usuario.

+0

Pero no registra el evento de ningún usuario, falsificado o de lo contrario. – MatthewMartin

2

El nombre de usuario en el Registro de eventos se basa en el contexto en el que se está ejecutando la aplicación. No se puede establecer explícitamente. Si se trata de una aplicación ASP.NET, puede estar utilizando la cuenta de servicio.

EDIT: Encontré similar question. Propone usar la función Win32 Api ReportEvent para establecer la información del usuario.

+0

Creo que el contexto se ignora todo junto para mi código de muestra. Si pudiera hacer que el registrador usara el contexto, estaría feliz. – MatthewMartin

+0

Eche un vistazo a esta pregunta similar: http://stackoverflow.com/questions/147307/-net-how-to-set-user-information-in-an-eventlog-entry –

1

System.Diagnostics le permite a su aplicación ASP.NET acceder directamente al registro de eventos de Windows. Debido a que su aplicación es una aplicación ASP.NET, puede utilizar

HttpContext.Current.User.Identity.Name

para obtener el nombre de usuario (en este caso será token de autenticación Formulario ya que usted está usando la autenticación de formularios).

Cuestiones relacionadas