我目前正在开展一个需要阅读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或没有编写一大堆解析器代码,就无法直接读取它们。
提前致谢。
答案 0 :(得分:1)
好吧,事实证明OpenEventLog()
不适合打开已保存的.evtx
文件。
我应该一直在使用OpenBackupEventLog()
。