writeentry write net log example eventlog event create c# .net vb.net event-log

c# - write - .NET: ¿cómo establecer la información del usuario en una entrada de EventLog?



eventlog.writeentry c# example (3)

La clase System.Diagnostics.EventLog proporciona una forma de interactuar con un registro de eventos de Windows. Lo uso todo el tiempo para el registro simple ...

System.Diagnostics.EventLog.WriteEntry("MyEventSource", "My Special Message")

¿Hay alguna manera de configurar la información del usuario en la entrada del registro de eventos resultante usando .NET?


Debe agregarlo usted mismo en el mensaje del evento.

Use el espacio de nombres System.Security.Principal para obtener la identidad actual del hilo que registra el evento.


Por lo general, el usuario que ejecuta el código que llama al método EventLog.WriteEntry será el usuario que se muestra en el registro de eventos para la entrada.

Podría intentar personificar a otro usuario creando su propio Principal e Identity y asociándolo con el hilo actual, sin embargo, esto no es aconsejable, ya que podría introducir problemas de seguridad y definitivamente complicará su aplicación.


Toughie ...

Busqué una manera de llenar el campo de usuario con un método .NET. Desafortunadamente no hay ninguno, y debe importar la antigua API Win32 [Función ReportEvent] ( http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx) con un DLLImportAttribute

También debe volver a declarar la función con los tipos correctos, ya que los Tipos de Datos de Invocación de Plataforma dicen

Asi que

BOOL ReportEvent( __in HANDLE hEventLog, __in WORD wType, __in WORD wCategory, __in DWORD dwEventID, __in PSID lpUserSid, __in WORD wNumStrings, __in DWORD dwDataSize, __in LPCTSTR *lpStrings, __in LPVOID lpRawData );

se convierte

[DllImport("Advapi32.dll", EntryPoint="ReportEventW", SetLastError=true, CharSet=CharSet.Unicode)] bool WriteEvent( IntPtr hEventLog, //Where to find it ? ushort wType, ushort wCategory, ulong dwEventID, IntPtr lpUserSid, // We''ll leave this struct alone, so just feed it a pointer ushort wNumStrings, ushort dwDataSize, string[] lpStrings, IntPtr lpRawData );

También desea consultar [OpenEventLog] ( http://msdn.microsoft.com/en-us/library/aa363672(VS.85).aspx) y [ConvertStringSidToSid] ( http://msdn.microsoft.com/). en-us / library / aa376402 (VS.85) .aspx)

Ah, y ahora está escribiendo código no administrado ... Tenga cuidado con las pérdidas de memoria. Buena suerte: p