ReadEventLog

C# Signature:

[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "ReadEventLog")]
static extern Boolean ReadEventLog(IntPtr hEventLog, EVT_READ_FLAGS dwReadFlags, UInt32 dwRecordOffset, IntPtr lpBuffer, UInt32 nNumberOfBytesToRead, out UInt32 pnBytesRead, out UInt32 pnMinNumberOfBytesNeeded);

VB Signature:

Declare Function ReadEventLog Lib "advapi32.dll" (TODO) As TODO

Sample Code:

{
      EVENTLOG_SEEK_READ = 0x0002,
      EVENTLOG_SEQUENTIAL_READ = 0x0001,
      EVENTLOG_FORWARDS_READ = 0x0004,
      EVENTLOG_BACKWARDS_READ = 0x0008
    }

Sample Code:

{
        int status = 0;
        UInt32 dwBytesRead = 0;
        UInt32 dwMinBytes = 0;
        UInt32 dwBytesToRead = 524287;//max buffer size
        pBuff = Marshal.AllocHGlobal((int) dwBytesToRead);
        if (!ReadEventLog(hEventLog, EVT_READ_FLAGS.EVENTLOG_SEQUENTIAL_READ | EVT_READ_FLAGS.EVENTLOG_BACKWARDS_READ, dwRecordNumber, pBuff, dwBytesToRead, out dwBytesRead, out dwMinBytes))
        {
        status = Marshal.GetLastWin32Error();
        if (status == 122)
        {
            pBuff = Marshal.ReAllocHGlobal(pBuff, (IntPtr)Convert.ToInt32(dwMinBytes));
            dwBytesToRead = dwMinBytes;
            if (!ReadEventLog(hEventLog, EVT_READ_FLAGS.EVENTLOG_SEQUENTIAL_READ | EVT_READ_FLAGS.EVENTLOG_BACKWARDS_READ, dwRecordNumber, pBuff, dwBytesToRead, out dwBytesRead, out dwMinBytes))
            {
            Console.WriteLine("ReadRecord (2) ERROR {0}", Marshal.GetLastWin32Error());
            }
            else
            {
            return Marshal.GetLastWin32Error();
            }

        }
        else
        {
            Console.WriteLine("ReadRecord ERROR {0}", Marshal.GetLastWin32Error());
        }
        }

Sample Code:

return (int)dwBytesRead;
    }

Última actualización