2008-09-29 3 views

답변

5

터프가 ...

나는 .NET 메소드로 사용자 필드를 채울 방법을 찾았습니다. 불행하게도 아무도 없다, 당신은 Platform Invoke Data Types

그래서

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 
); 
를 말하는 것처럼 당신은 또한 오른쪽 종류와 기능을 재 선언해야 DLLImportAttribute

로 (http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx)를 일반 기존의 Win32 API [ReportEvent 기능]을 가져와야합니다

[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 
); 

은 01,235,183,713 (또한 [하는 OpenEventLog]보고 싶을된다및 [ConvertStringSidToSid] (http://msdn.microsoft.com/en-us/library/aa376402(VS.85).aspx)

아, 그리고 당신이 지금 관리되지 않는 코드를 작성하는 ... 메모리 leaks.Good 행운을 조심 : P

0

이벤트 메시지에 직접 추가해야합니다.

System.Security.Principal 네임 스페이스를 사용하여 이벤트를 기록하는 스레드의 현재 ID를 가져옵니다.

0

일반적으로 EventLog.WriteEntry 메서드를 호출하는 코드를 실행하는 사용자는 항목의 이벤트 로그에 표시된 사용자가됩니다.

자신의 주체 및 신원을 작성하여 현재 스레드와 연결하여 다른 사용자를 가장하려고 시도 할 수 있지만 보안 문제가 발생하고 응용 프로그램이 복잡해질 수 있으므로 권장하지 않습니다.