gpt4 book ai didi

c++ - 相对目录 ZwCreateFile

转载 作者:可可西里 更新时间:2023-11-01 10:06:53 24 4
gpt4 key购买 nike

我必须为我的大学项目实现跨 View 文件完整性检查器。为此,我该如何在内核模式下列出目录的文件??

最佳答案

您的起点是 ZwCreateFile - 具有诸如“FILE_LIST_DIRECTORY”之类的选项。

然后您将使用 ZwQueryDirectoryFile获取有关该目录中文件的信息。

确保确定您不会忘记ZwClose打开某些东西之后 - 在用户模式应用程序中它并不是那么重要,它在使用后再次关闭。但是内核不知道驱动程序何时停止使用文件(或者,就此而言,如果其他驱动程序已获得该文件句柄,并且将在某个时候使用它),所以即使您的驱动程序已卸载,文件它打开后将保持打开状态,直到系统重新启动 - 我非常喜欢“不重新启动”我的系统,并且有一套好的驱动程序,运行一台机器一年多应该是可能的。如果您的驱动程序每天泄漏一个句柄,那就是 365 个句柄泄漏。

所以,代码看起来像这样:

HANDLE h;
NTSTATUS status;
OBJECT_ATTRIBUTES oa = { sizeof(OBJECT_ATTRIBUTES), NULL, L"mydir",
OPEN_CASE_INSENSITIVE, NULL, NULL };
IO_STATUS_BLOCK iosb = {};

status = ZwCreateFile(&h, FILE_LIST_DIRECTORY, &oa, &iosb, NULL,
FILE_ATTRIBUTE_NORMAL, FILE_OPEN, FILE_DIRECTORY_FILE,
NULL, 0);
if (status != STATUS_SUCCESS)
{
... do something...
return errorcode;
}
else
{
FILE_DIRECTORY_INFORMATION info;
for(;;)
{
status = ZwQueryDirectoryFile(h, NULL, NULL, &iosb, &info, sizeof(info),
FileDirectoryInformation, TRUE, L"*.*",
FALSE);
if (status != STATUS_SUCCESS)
{
... check error code and perhaps print if unexpected error ...
break;
}
... do soemthing with `info` ...
}
}
ZwClose(h);

这只是一个“草图”。我现在没有编译它的设置,我可能错过了一些重要的东西。但它应该给你一些想法。这里有很多可选参数和 optional ,有些我已经“猜到”了你想要什么,但我认为我已经做出了合理的选择。可能缺少细节导致它无法工作,但作为一个粗略的起点,它至少应该给你一个想法。

关于c++ - 相对目录 ZwCreateFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17168129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com