GetFileSizeEx出现错误,获取不正确的句柄



我的目标是使用c++找到(%SystemRoot%\System32\winevt\logs(中存在的日志文件的大小(例如:获取Application.evtx的文件大小(。我尝试了GetFileSizeEx(https://learn.microsoft.com/fr-fr/windows/win32/api/fileapi/nf-fileapi-getfilesizeex)方法,但我得到了错误,比如传递了不正确的句柄。向GetFileSizeEx传递了三个句柄(EvtQuery、EvtGetChannelConfigProperty、OpenEventLog(,但我得到了相同的错误。我能知道应该通过什么手柄才能获得尺寸吗:

找到类似的问题(如何使用EvtQuery函数查找日志文件的大小?(。尝试过此操作,但由于GetFileSizeEx错误,我得到了无效句柄。

默认文件位置为C:WindowsSystem32winevtLogs

应用程序日志称为Application.evtx

如果你想得到它的大小做

#include <iostream>
#include <filesystem>
int main() {
std::filesystem::path example = "C:\Windows\System32\winevt\Logs\Application.evtx";
std::cout << example << " size = " << std::filesystem::file_size(example) << 'n';
}

如果你想确保得到正确的位置,因为管理员可以移动它,那么在注册表中查看这里

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogApplicationFile

获取文件名

根据Doc:GetFileSizeEx函数

句柄必须使用FILE_READ_ATTRIBUTES访问创建权限或同等权限,或者调用方必须具有足够的权限包含该文件的目录。

是否检查了打开文件的结果以获取文件句柄?如果文件打开失败,则您正在使用无效句柄调用GetFileSizeEx

最新更新