Пример #1
0
        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);
            }
        }
Пример #2
0
 public static extern bool ReadEventLog(HEVENTLOG hEventLog, EVENTLOG_READ dwReadFlags, uint dwRecordOffset, SafePEVENTLOGRECORD lpBuffer, uint nNumberOfBytesToRead, out uint pnBytesRead, out uint pnMinNumberOfBytesNeeded);