如何导出Windows系统和应用程序事件日志

本文关键字:应用程序 事件 日志 系统 何导出 Windows | 更新日期: 2023-09-27 17:50:54

使用EvtExportLog函数,我目前无法为Path和/或Query参数指定正确的值。

我的目标是导出本地应用程序系统事件日志。

我试过:

EvtExportLog(
    IntPtr.Zero, 
    "Application", 
    "*", 
    "C:''SomePath''Application.evtx", 
    EventExportLogFlags.LogFilePath);

使用以下p/Invoke定义:

[Flags]
private enum EventExportLogFlags
{
    ChannelPath = 1,
    LogFilePath = 2,
    TolerateQueryErrors = 0x1000
};
[DllImport(@"wevtapi.dll", 
    CallingConvention = CallingConvention.Winapi,
    CharSet = CharSet.Auto,
    SetLastError = true)]
private static extern bool EvtExportLog(
    IntPtr sessionHandle,
    string path,
    string query,
    string targetPath,
    [MarshalAs(UnmanagedType.I4)] EventExportLogFlags flags);

不幸的是,函数返回false和最后一个错误代码2 (ERROR_FILE_NOT_FOUND)。

我的问题:

PathQuery参数中输入什么以导出本地应用程序和系统事件日志?

如何导出Windows系统和应用程序事件日志

回答我自己的问题:

我的PathQuery实际上是正确的。问题出在Flags参数。

我必须指定EventExportLogFlags.ChannelPath参数,而不是指定EventExportLogFlags.LogFilePath参数。

则导出成功:

EvtExportLog(
    IntPtr.Zero, 
    "Application", 
    "*", 
    "C:''SomePath''Application.evtx", 
    EventExportLogFlags.ChannelPath); // <-- HERE!