c++ - 读取给定路径中保存的 EVTX 文件

标签 c++ c winapi event-log

我目前正在做一个需要读取 Windows 事件的项目。 我正在使用 Win API 中的 OpenEventLog() 和 ReadEventLog()。我可以使用事件的类型名称从系统中读取事件。 但我需要指定我从 EventViewer 保存的 .evtx 文件的文件名或文件路径。我尝试了以下代码,

HANDLE logHandle = OpenEventLog(NULL, "C:\\Users\\MyAccount\\Documents\\myevents.evtx");
DWORD status = GetLastError();
if(logHandle == NULL){
    cerr<<"NO HANDLE GENERATED!!!"<<endl;
}else if(status == ERROR_INVALID_HANDLE){
    cerr<<"INVALID HANDLE!!!"<<endl;
}else if(status!=0){
    cout<<"OPENEVENTLOG ERROR STATUS::>"<<status<<endl;
}

但它没有找到指定的文件并切换到默认的应用程序事件。谁能告诉我可能是什么问题?或者代码中是否有任何需要更改的内容?

PS:我什至尝试将文件放在项目文件夹中并仅指定文件名(myevents.evtx),但仍然不起作用。我还尝试直接读取 evtx,如 "Reading .evt/.evtx files directly" 所示。 ,但后来我发现这是做不到的。显然,如果没有 win API 或不编写一大堆解析器代码,就无法直接读取它们。

提前致谢。

最佳答案

好吧,原来 OpenEventLog() 并不是用来打开保存的 .evtx 文件的。 我应该为此使用 OpenBackupEventLog()

关于c++ - 读取给定路径中保存的 EVTX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48881286/

相关文章:

C strcat() 给出错误的附加字符串

winapi - 在 WinMain 中没有消息循环有多可取?

multithreading - 有没有比mciSendString更好的播放Mp3的方法了?

c++ - wxScrolledWindow 滚动条不工作

c++ - Client Torrent 中的 DLNA 协议(protocol)

c++ - 尝试打印存储在 C++ 类型对象数组中的信息

c - 将二维数组作为指针传递,gcc 警告不兼容的指针类型

c++ - 迭代包含在两个范围的交集中的对象

c ->> 标记之前的预期表达式

c - 不允许 StatusBar 定位自己