在给定路径中读取已保存的EVTX文件

时间:2018-02-20 09:00:23

标签: c++ c winapi event-log

我目前正在开展一个需要阅读Windows事件的项目。 我正在使用Win API中的OpenEventLog()和ReadEventLog()。我可以使用事件的typename从系统中读取事件。 但我需要指定我从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;
}

但它找不到指定的文件并切换到默认的Application Events。任何人都可以告诉我问题是什么?或者代码中是否有任何变化?

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

好吧,事实证明OpenEventLog()不适合打开已保存的.evtx文件。 我应该一直在使用OpenBackupEventLog()