• 读取windows日志


    #include "stdafx.h"
     
    #include
    #include
    #include

    #pragma comment(lib, "wevtapi.lib")
    #include
    #include
    #include
    #include
     

     
    #include
    #include
    #include
    #include
     
    const DWORD BUFFER_SIZE = 40960;

    std::unique_ptr buffer(new BYTE[BUFFER_SIZE]);

    void ReadEventLog(const std::string& logName)
    {
        HANDLE eventLog = OpenEventLogA(nullptr, logName.c_str());
        if (eventLog == nullptr)
        {
            std::cout << "Failed to open event log: " << logName << std::endl;
            return;
        }

        DWORD bytesRead;
        DWORD totalBytes;

        if (!ReadEventLog(eventLog, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ, 0, buffer.get(),
            BUFFER_SIZE, &bytesRead, &totalBytes))
        {
            std::cout << "Failed to read event log: " << logName << std::endl;
            CloseEventLog(eventLog);
            return;
        }

        BYTE* bufferPtr = buffer.get();
        DWORD eventsRead = 0;
        DWORD eventOffset = 0;
     
         
        while (bytesRead > 0)
        {
            EVENTLOGRECORD* eventRecord = reinterpret_cast(bufferPtr + eventOffset);
     
            std::string eventSource(reinterpret_cast(bufferPtr + eventOffset + sizeof(EVENTLOGRECORD)));
            std::string eventDescription(reinterpret_cast(bufferPtr + eventOffset + eventRecord->StringOffset));

            std::cout << "Event ID: " << eventRecord->EventID << std::endl;
            std::cout << "Event Source: " << eventSource << std::endl;
            std::cout << "Event Description: " << eventDescription << std::endl;

            eventOffset += eventRecord->Length;
            bytesRead -= eventRecord->Length;
            eventsRead++;
        }
        //遍历日志
        //end遍历日志
        CloseEventLog(eventLog);

        std::cout << "Read " << eventsRead << " events from the " << logName << " log." << std::endl;
    }
    /*日志遍历处理*/

     
    int main()
    {
    #if 0
        SyslogMonitor  kk;
        kk.read("Application");
        kk.read("System");
        kk.read("Security");
    #else
        ReadEventLog("Application");

        std::cout << "========================" << std::endl;
        ReadEventLog("System");
        std::cout << "========================" << std::endl;
        ReadEventLog("Security");
        
    #endif

        getchar();
        return 0;
    }


     
     

  • 相关阅读:
    单目3D目标检测——MonoCon 模型训练 | 模型推理
    读AI新生:破解人机共存密码笔记02进化
    PackagesNotFoundError:学习利用报错信息找到解决方法
    【开题报告】基于django+vue新闻发布系统(论文+程序)
    AI题目整理
    【软考】9.3 二叉树存储/遍历/线索/最优/查找/平衡
    Socket套接字(Java)
    很迷茫要不要学习次世代建模,看完这8个要点,豁然开朗
    [附源码]SSM计算机毕业设计校园爱心支愿管理系统JAVA
    机器学习数据的预处理
  • 原文地址:https://blog.csdn.net/jijie_ming/article/details/134080146