目录相对 ZwCreateFile

2024-03-21

我必须为我的大学项目实施交叉视图文件完整性检查器。为此,我如何在内核模式下列出目录的文件?


你的起点是ZwCreateFile http://msdn.microsoft.com/en-us/library/windows/hardware/ff566424%28v=vs.85%29.aspx- 其中有“FILE_LIST_DIRECTORY”等选项。

然后您将使用ZwQueryDirectoryFile http://msdn.microsoft.com/en-us/library/windows/hardware/ff567047%28v=vs.85%29.aspx获取有关该目录中文件的信息。

Make SURE你没有忘记ZwClose http://msdn.microsoft.com/en-us/library/windows/hardware/ff566417%28v=vs.85%29.aspx打开某些内容后 - 在使用后再次关闭的用户模式应用程序中,这并不那么重要。但是内核不知道驱动程序何时停止使用文件(或者,就此而言,是否已向其他驱动程序提供了该文件句柄,并且将在某个时刻使用它),因此即使您的驱动程序已卸载,文件它打开的文件将保持打开状态,直到系统重新启动 - 我非常喜欢“不重新启动”我的系统,并且通过一组好的驱动程序,运行机器一年多应该是可能的。如果您的驱动程序每天泄漏 1 个句柄,那么就泄漏了 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);

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目录相对 ZwCreateFile 的相关文章

  • 同步执行异步函数

    我对此主题进行了大量搜索 并且阅读了本网站上有关此主题的大部分帖子 但是我仍然感到困惑 我需要一个直接的答案 这是我的情况 我有一个已建立的 Winform 应用程序 但无法使其全部 异步 我现在被迫使用一个全部编写为异步函数的外部库 在我
  • 如何在 MFC 中调整对话框大小时移动控件?

    我已经在 MFC 中创建了对话框视图 从下图中可以清楚地看到 如滑块控件和编辑框等 当我调整对话框大小时 这些控件不会移动 在此输入图像描述 https i stack imgur com 7OxAK jpg 我想移动控件以适应对话框 但不
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 使用 Selenium for C# 登录 Facebook

    我一直在使用 Selenium C 框架并尝试进行 facebook 登录 但没有任何运气 这是我到目前为止得到的 基于这篇文章 使用 Selenium 测试 Facebook Connect 应用程序 https stackoverflo
  • 基于 MS Bot Framework 中的响应分支对话框/表单

    我们正在尝试使用 MS Bot Framework 但尚未完全弄清楚如何实现此场景 我们有一个 LUIS 对话框 类型 它工作正常并且经过适当的培训 以常见的三明治为例 LUIS 意图寻找的基本内容是用户询问订单状态 如果问题中提供了订单号
  • 有没有办法使 C90 标准中的枚举无符号? (符合 MISRA-C 2004 标准)

    我正在尝试找到一种使枚举 无符号 的方法 enum x1 0 x2 x3 uint8 t x2 lt PC LINT MISRA C 2004 will complain about mixing signed and unsigned h
  • 返回指向 std::vector 中的对象的 a

    我有一个关于返回对向量元素的引用的非常基本的问题 有一个向量vec存储类的实例Foo 我想访问这个向量中的一个元素 不想使用向量索引 我应该如何编码该方法getFoo here include
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • 如何防止字符串被截留

    我的理解 可能是错误的 是 在 C 中 当你创建一个字符串时 它会被实习到 实习生池 中 这保留了对字符串的引用 以便多个相同的字符串可以共享操作内存 但是 我正在处理很多很可能是唯一的字符串 一旦完成每个字符串 我需要将它们从操作内存中完
  • 以标准用户身份打开默认浏览器 (C++)

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 当 ShellExecute 打开浏览器时 它似乎读取 本地管理员 配置文件而不是用户
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • 需要使用 openssl 加密和解密文件的示例 C 代码

    我正在用 Linux C 编写代码 我需要使用以下命令来加密和解密文件 openssl 目前 我使用系统命令 des3 e nosalt k 0123456789012345 in inp file out out file 进行加密 使用
  • 如何使用简历实现一个“一网打尽”的异常处理程序?

    我想知道我怎样才能写一个抓住他们全部应用程序级别的异常处理程序将为用户提供恢复应用程序流程的选项 如果您正在运行 Windows 窗体应用程序 将处理程序添加到Application ThreadException event
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN
  • 在类中使用 std::chrono::high_resolution_clock 播种 std::mt19937 的正确方法是什么?

    首先 大家好 这是我在这里提出的第一个问题 所以我希望我没有搞砸 在写这篇文章之前我用谷歌搜索了很多 我对编码 C 很陌生 我正在自学 考虑到有人告诉我 只为任何随机引擎播种一次是一个很好的做法 我在这里可能是错的 什么是正确 最佳 更有效
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对

随机推荐

  • 缩小的单个捆绑包与通过 http/2 的多个文件

    对于 CSS 和 JS 捆绑 一般建议是什么 是将所有内容捆绑到一个文件中更好 还是提供多个文件更好 我个人认为多个文件更好 尤其是使用 http 2 但是捆绑有很好的理由 当所有内容都在一个文件中时 缩小和 gzip 会产生更好的结果 因
  • Ruby on Rails 中的“分配”有什么作用?

    我目前正在尝试学习Ruby on Rails和测试框架RSpec 什么是assigns在这个 RSpec 测试中做什么 describe GET index do it assigns all mymodel as mymodel do m
  • 线程中的临界区是什么?

    请有人能举例简单地告诉我临界区的含义是什么 用简单的语言 A 临界区 http en wikipedia org wiki Critical section是需要在没有外部干扰的情况下执行的代码部分 即没有其他线程可能影响该部分内的 中间
  • TypeScript 中的私有静态属性

    如果我执行下面类似的操作 如何从类中访问该属性 class Person private static name string console log Person name 不是应该无法访问吗 这应该是一个错误 但事实并非如此 根据规范第
  • 如何创建分支?

    如何在SVN中创建分支 使用创建一个新分支svn copy命令如下 svn copy svn ssh host example com repos project trunk svn ssh host example com repos p
  • 派生类中类模板的部分特化会影响基类

    我有一个元功能 struct METAFUNCION template
  • 在 WooCommerce 管理订单列表中添加自定义操作按钮

    我已关注本说明 https fernandoacosta net blog 2015 06 07 woocommerce adicionar novo status de pedido 为我的 WooCommerce 订单添加自定义订单状态
  • 如何修复应用程序构造函数中的异常

    我是 Javafx 新手 我刚刚下载了 JDK 12 并遵循了教程 它已经工作但对我不起作用 我正在使用模块来要求 javafx controls 这是代码 在我的主课中 我在SOFlow中尝试了很多解决方案但没有结果 我尝试了 1 将 p
  • 在 C# 中序列化和存储对象的最简单方法?

    我正在寻找一个简单的解决方案来序列化和存储包含配置 应用程序状态和数据的对象 它是一个简单的应用程序 数据不多 速度不是问题 我希望它正在进行中 我希望它在文本编辑器中比在 xml 中更容易编辑 我找不到任何可以在进程中处理它的 net 文
  • 如何使用Beautifulsoup4等待网站返回数据

    我使用 beautifulsoup4 编写了一个脚本 该脚本基本上从网页上的表格中获取密码列表 问题是我的 python 脚本不会等待网页返回的内容 并且会中断或显示 列表索引超出范围 代码如下 ssl lab url https www
  • 谷歌 reCaptcha V3 中的“浏览器错误”(不可见)

    我正在使用 google reCaptcha v3 不可见 但我收到了一些响应负载 success false error codes browser error 我用谷歌搜索但没有找到任何有关 浏览器错误 的信息 从 7900 个 reC
  • npm、pip、pipenv 和 Poetry 包管理器之间的功能比较 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 主要特点是怎样的npm与之比较pip pipenv and Poetry https python poetry org 包管理器 我
  • 记录 ServiceStack Web 服务 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 用于记录基于 ServiceStack 的 Web 服务的选项有哪些 我不是在谈论单行字符串 我希望能够详细记录 可能很长 返回类型
  • 定义 CreateProjection 和 CreateMap

    在我的项目中 我使用实体框架进行 ORM 使用 Dto 类进行 api 响应 我使用 Automapper 在两者之间进行映射 当我需要直接从 EF 可查询中获取 Dtos 时 我会执行最后的操作ProjectTo lt gt 根据我的查询
  • 将 ggplot 标题放置在绘图的右上角

    我正在使用优秀的theme minimal 在 ggplot0 9 3 中找到 它具有白色背景 我想将绘图的标题放置在绘图右上角的自定义位置 在下面的例子中我知道x and y值 但我想知道是否有办法通过xmax and ymax值以确保文
  • 迭代Go地图获取索引

    为了使用revel s even https revel github io manual templates html even模板中的关键字我想在迭代时获取地图条目的索引range 有什么办法可以做到吗 我的地图具有以下结构 map s
  • dequeueReusableCellWithReuseIdentifier: 和 cellForItemAtIndexPath: 之间的区别

    我一直想知道为什么我的代码可以很好地工作cellForItemAtIndexPath 不与dequeueReusableCellWithReuseIdentifier 在获取集合视图单元格时 这是我的代码 这个效果很好 NSInteger
  • 为连续序列和分割向量创建分组变量

    我有一个向量 例如c 1 3 4 5 9 10 17 29 30 我想将形成规则 连续序列的 相邻 元素分组在一起 即在参差不齐的向量中增加 1 结果是 L1 1L2 3 4 5L3 9 10 L4 17L5 29 30 天真的代码 前 C
  • 如何确定 Qt 5 中的 QtWebEngine 在运行时使用的是哪个 chromium 版本?

    我在 Qt 5 中找不到任何函数来确定使用哪个 chromium 版本QtWebEngine 我不想在代码中硬编码 chromium 版本 因为我经常更新我的应用程序 并且每个版本中的 chromium 版本通常都会更改 而且 Qt 是向后
  • 目录相对 ZwCreateFile

    我必须为我的大学项目实施交叉视图文件完整性检查器 为此 我如何在内核模式下列出目录的文件 你的起点是ZwCreateFile http msdn microsoft com en us library windows hardware ff