gpt4 book ai didi

c++ - 如何确定进程打开文件的顺序?

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:39 25 4
gpt4 key购买 nike

有没有办法获取一个进程所有打开的文件句柄,并按文件打开时间排列?我们有一个项目,正是需要这个 - 我们需要确定哪些文件是由 Dj 软件打开的,例如 Traktor 或 Serato。我们需要知道其顺序的原因是要确定哪个文件在第一个牌组中,哪个文件在第二个牌组中。

目前我们使用来自 Ntdll.dll (Winternl.h) 的 Windows 内部 API 来确定一个进程的所有打开文件的列表。也许这不是最好的方法。非常感谢任何建议。

我们依赖于在特定操作系统版本和特定 DJ 软件版本上观察到的 API 行为,即进程的所有打开文件的列表永远不会重新排列,即遵守顺序。我知道这是一个不好的做法,但它是客户在发布前“应该是”的功能,所以我们不得不这样做。现在的问题是,当这些句柄有时在没有任何特定原因的情况下随机重新排列时,我们有一个错误。那刹车一切。我以为那些win结构中可能会有一个字段来获取文件的打开时间,但似乎没有这样的东西。有关该 API 的文档非常糟糕。

我想到了一些代码粘贴,但它是一个 200 行长的函数,它使用函数指针从 dll 间接调用,并且 WinAPI 的所有结构都是手动重新定义的,所以它真的很难阅读。实际上,甚至不包括 Winternl.h header - 所有内容也是手动加载的,如下所示:

GetProcAddress( GetModuleHandleA("ntdll.dll"), "NtQuerySystemInformation" );

对于一个跨平台的应用来说,真是让人头疼...

P.S. 我已经发布了一个相关问题 here关于获取打开的文件句柄的任何跨平台或 Qt 方法,也许这些东西会有用或相关。

最佳答案

如果只是为了调试目的而检查其他操作系统的行为,您可以使用在 Debug模式下创建进程的技术,并按顺序拦截所有 dll 加载事件,这里有一个很好的 article谈论那个。

关于c++ - 如何确定进程打开文件的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12710968/

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