public void NotifyChangeEventLogTest() { using (var hEvent = CreateEvent(null, false, false, null)) using (var hEL = OpenEventLog(null, eventLogName)) { Assert.That(GetNumberOfEventLogRecords(hEL, out var numRec), ResultIs.Successful); var t = new System.Threading.Thread(ThreadProc); t.Start(((HEVENTLOG)hEL, hEvent)); System.Threading.Thread.Sleep(100); Assert.That(ReportEvent(hEL, EVENTLOG_TYPE.EVENTLOG_INFORMATION_TYPE, 5, 5, SafePSID.Current, 2, 0, new[] { "Testing", "1, 2, 3" }, default), ResultIs.Successful); while (t.IsAlive) { System.Threading.Thread.Sleep(100); } Assert.That(GetNumberOfEventLogRecords(hEL, out var numRec2), ResultIs.Successful); Assert.That(numRec2, Is.GreaterThan(numRec)); using (var mem = new SafePEVENTLOGRECORD()) { Assert.That(ReadEventLog(hEL, EVENTLOG_READ.EVENTLOG_BACKWARDS_READ | EVENTLOG_READ.EVENTLOG_SEQUENTIAL_READ, 0, mem, mem.Size, out var read, out var minReq), ResultIs.Successful); Assert.That(mem.EventType, Is.EqualTo(EVENTLOG_TYPE.EVENTLOG_INFORMATION_TYPE)); Assert.That(mem.Strings.Length, Is.EqualTo(2)); Assert.That(mem.Strings[0], Is.EqualTo("Testing")); } } void ThreadProc(object obj) { var(hLog, hEvent) = ((HEVENTLOG hLog, SafeEventHandle hEvent))obj; Assert.That(NotifyChangeEventLog(hLog, hEvent), ResultIs.Successful); WaitForSingleObject(hEvent, 0); } }
public static extern bool ReadEventLog(HEVENTLOG hEventLog, EVENTLOG_READ dwReadFlags, uint dwRecordOffset, SafePEVENTLOGRECORD lpBuffer, uint nNumberOfBytesToRead, out uint pnBytesRead, out uint pnMinNumberOfBytesNeeded);