使用 GetFileSizeEx 获取不正确的句柄作为错误

发布于 2025-01-10 12:43:49 字数 658 浏览 0 评论 0原文

我的目标是使用 c++ 查找 (%SystemRoot%\System32\winevt\logs) 中存在的日志文件的大小(例如:获取 Application.evtx 的文件大小)。我尝试使用 GetFileSizeEx (https://learn .microsoft.com/fr-fr/windows/win32/api/fileapi/nf-fileapi-getfilesizeex) 方法,但我收到错误,例如传递了错误的句柄。将三个句柄 (EvtQuery、EvtGetChannelConfigProperty、OpenEventLog) 传递给 GetFileSizeEx 但我收到相同的错误。我可以知道应该传递什么句柄来获取大小:

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

My goal is to find the size of log files which is present in (%SystemRoot%\System32\winevt\logs) using c++ (For Eg : To get the file size of Application.evtx). I tried with GetFileSizeEx (https://learn.microsoft.com/fr-fr/windows/win32/api/fileapi/nf-fileapi-getfilesizeex) method but i got error like incorrect handle is passed. Passed three handle with (EvtQuery,EvtGetChannelConfigProperty,OpenEventLog) to GetFileSizeEx but i get the same error. Can i know what handle should be passed to get the size:

Find the similar question (How to find the size of log files using EvtQuery function?). Tried this but I got invalid handle as error with GetFileSizeEx.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谁与争疯 2025-01-17 12:43:49

默认文件位置是 C:\Windows\System32\winevt\Logs

应用程序日志称为 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_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\File

以获取文件名

The default file location is C:\Windows\System32\winevt\Logs

The application log is called Application.evtx

If you want to get its size do

#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';
}

If you want to be sure to get the correct location becuase an admin can move it then look here in the registry

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\File

to get the file name

千纸鹤 2025-01-17 12:43:49

根据文档:GetFileSizeEx 函数

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

是否检查过打开文件的结果来获取文件句柄?如果文件无法打开,则说明您使用无效句柄调用 GetFileSizeEx

According to the Doc:GetFileSizeEx function

The handle must have been created with the FILE_READ_ATTRIBUTES access
right or equivalent, or the caller must have sufficient permission on
the directory that contains the file.

Whether you have checked the result of opening the file to get the file handle? If the file failed to open, you're calling GetFileSizeEx with an invalid handle.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文