无法复制具有已知路径的文件句柄,但有其 HANDLE_ENTRY_INFO

2023-12-01

我有5个进程。我有他们的进程ID。每个进程都锁定自己的parent.lock文件。我有这些parent.lock数组中的文件路径称为PARENT_LOCKS_PATHS.

Using NtQuerySystemInformation and SystemHandleInformation我得到了一个返回的列表SYSTEM_HANDLE_TABLE_ENTRY_INFO这 5 个进程使用的所有句柄。它们按 PID 分组。

结构SYSTEM_HANDLE_TABLE_ENTRY_INFO:

var SYSTEM_HANDLE_TABLE_ENTRY_INFO = new ctypes.StructType('SYSTEM_HANDLE_TABLE_ENTRY_INFO', [ //typedef struct _TagHANDLEINFO
    {'UniqueProcessId': ctypes.unsigned_short},
    {'CreatorBackTraceIndex': ctypes.unsigned_short},
    {'ObjectTypeIndex': ctypes.unsigned_char},
    {'HandleAttributes': ctypes.unsigned_char},
    {'HandleValue': ctypes.unsigned_short},
    {'Object': ctypes.uint32_t},
    {'GrantedAccess': ctypes.unsigned_long}
]); //HANDLEINFO, PHANDLEINFO;

在每个PID组中,我知道哪个句柄是parent.lock文件,我知道这一点是因为parent.lock文件是only句柄有GrantedAccess of 1048704。所以我有一个对象,它的 PID 与其关联parent.lock处理条目信息。

所以现在的问题是:我想确定,哪个parent.lock文件属于哪个路径PARENT_LOCKS_PATHS文件但无法使用GetFinalPathNameByHandle(因为我需要支持xp)。我无法复制句柄 ID,因为文件已锁定,它是通过以下方式创建/打开的:

 mLockFileHandle = CreateFileW(filePath.get(),
                               GENERIC_READ | GENERIC_WRITE,
                               0, // no sharing - of course
                               nullptr,
                               CREATE_ALWAYS,
                               0,
                               nullptr);

Here is a graphic of my situation (thanks to visio):


对于 XP,您可以使用NtQueryInformationFile()FileNameInformation信息类。

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

无法复制具有已知路径的文件句柄,但有其 HANDLE_ENTRY_INFO 的相关文章

  • 链接到大地址感知 DLL

    假设我有一个使用 LARGEADDRESSAWARE 链接器标志集构建的 DLL 现在我有一个动态链接到该 DLL 的应用程序 这是否会使我的应用程序具有大型地址意识 如果不是 那么为任何 DLL 设置此标志是否有意义 讨论here htt
  • WaitForSingleObject 是否充当内存屏障?

    昨天一个关于双重检查锁定的问题引发了一系列的想法 让我对一个简单的情况感到不确定 在下面的代码中 是否可以点击printf 不再同步 在这个简单的示例中 这些值可能位于同一缓存行上 因此我认为这种可能性较小 假设一开始可能性 gt 0 如果
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns
  • 从剪贴板获取文本后将一个字符串插入另一个字符串所需的建议

    简介及相关信息 我有一个edit control只需要接受带符号的十进制数 类似于 12 35 我决定通过以下方式实现这一点subclassing The WM CHAR处理程序似乎运行良好 我需要处理其他几条消息以完全保护用户免于输入无效
  • ListView 多选行为?

    Comtl32 dll v6 0中的ListView进行多项选择 使用Shift键时 如下 x表示选择 00xxxx xxxxxx xxxx00 早期版本的 ListView 的做法如下 00xx00 00xx00 00xx00 有没有办法
  • 如何在 Windows 上查找当前系统缓存大小?

    到处搜索 但未能找到 API 调用来检索 Windows 上 文件 系统缓存的当前大小 全局内存状态Ex https stackoverflow com a 2017659 450917 检索总计 免费 已用和交换统计数据 获取系统文件缓存
  • 尝试使用 LoadImage 加载应用程序的图标,但该函数返回 0

    我正在尝试使用加载应用程序的图标LoadImageWinAPI函数 但由于某种原因它总是返回0 我已阅读文档 https msdn microsoft com en us library windows desktop ms648045 v
  • Win32 自定义绘制树视图控件

    我正在尝试使用 NM CUSTOMDRAW 消息自定义树视图控件 我只是想用灰色绘制所有其他可见的项目 这是绘制的代码 INT CResourceOutliner On WM NOTIFY HWND hDlg WPARAM wParam L
  • 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    我正在尝试从提升的进程创建中或低完整性进程 我知道还有其他类似的问题 但它们主要关注使用资源管理器或任务计划程序等解决方法 我想坚持使用CreateRestrictedToken CreateProcessAsUser 我认为一定可以以某种
  • 如何捕获正在播放的音频?

    有谁知道如何以编程方式捕获正在播放的声音 即来自声卡的所有声音 而不是麦克风等输入设备 假设您正在谈论 Windows 则基本上可以通过三种方法来实现此目的 首先是打开音频设备的主输出作为录音源 这只有在驱动程序支持时才可能实现 尽管现在大
  • 具有自定义镶边的 WPF 窗口在右侧和底部有不需要的轮廓

    我使用 Microsoft Windows Shell dll 创建了带有自定义镶边的 WPF 窗口 这是代码
  • 如何使用 C++ 禁用另一个进程中窗口上的关闭按钮?

    我需要从另一个进程禁用窗口上的关闭按钮 我有它的句柄hWnd我尝试这样做 DWORD dwCStyle GetClassLongPtr hWnd GCL STYLE SetClassLongPtr hWnd GCL STYLE dwCSty
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 如何让 Win32 使用 Windows XP 样式字体

    我正在使用纯 C 和 WinAPI 编写 Win32 应用程序 不允许使用 MFC 或 C 为了让控件使用适当的样式进行绘制 我使用了清单 如相应的 MSDN 文章中所述 一切都很好 当我更改系统样式时 我的应用程序也会更改样式 但使用的字
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • 是否可以通过 C#.NET 编写 Win32 .dll 文件?

    是否可以通过 C NET 编写 Win32 dll 文件 如果是的话 我在哪里可以找到一些教程 如果不是 那么您对编写 Win32 DLL 有什么建议 Thanks 对的 这是可能的 事实上有一个工具可以做到这一点 它在 Rainmeter
  • 在运行时,我如何判断我是否在 WinXP+ 上? win32

    我正在进行一些 win32 字符串 API 调用 并假设字符串以宽字符串形式出现 这在 XP 和更高版本上有效 我该如何断言这一点 这是运行时检查还是编译时检查 我做错了吗 这是一个例子 typedef std basic string
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 在 Windows 上通过 ctypes 将文件描述符传递给 C 库函数

    我试图通过 ctypes 将文件描述符传递给在 fd 上执行写入的 C 函数 在linux上它可以工作 在 Windows 上则不然 我不明白为什么 我没有 Windows 开发人员的经验 C func signature void fun
  • 使用 Visual C++ 在桌面上绘图

    我正在编写一个 opencv 应用程序 使用 Visual Studio VC 控制台应用程序使用激光束进行绘图 我想在桌面上画线 我知道绘图功能在 GDI32 dll 中可用 但对如何将 GDI32 dll 与我的 vc 代码集成感到困惑

随机推荐