Toughie ...
Я искал способ заполнить поле пользователя методом .NET. К сожалению, их нет, и вы должны импортировать простой старый Win32 API [функция ReportEvent] (http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx) с DLLImportAttribute
Необходимо также повторно объявить функцию с правильными типами, как Типы данных вызова платформы говорит
So
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
);
становится
[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
);
Вы также хотите посмотреть на [OpenEventLog] (http://msdn.microsoft.com/en-us/library/aa363672(VS.85).aspx) и [ConvertStringSidToSid] (http://msdn.microsoft.com/en-us/library/aa376402(VS.85).aspx)
О, и теперь вы пишете неуправляемый код ... Остерегайтесь утечек памяти. Удачи: p