【问题标题】:How to clear contents of log file already opened by the same Windows process?如何清除已被同一个 Windows 进程打开的日志文件的内容?
【发布时间】:2014-07-16 16:06:47
【问题描述】:

我在另一个 DLL 中的同一进程中有一些第三方代码,没有保持打开日志文件的源:

CreateFile(szFile, GENERIC_WRITE,
         FILE_SHARE_READ,
         NULL, OPEN_ALWAYS,
         FILE_ATTRIBUTE_NORMAL,
         NULL);

有什么方法可以从同一进程中清除此日志文件?使用相同的参数调用 CreateFile 显然会失败,因为我正在请求写访问,而文件只有 FILE_SHARE_READ。

有没有办法获取原始句柄而不需要管理员枚举本文中讨论的系统句柄http://forum.sysinternals.com/topic18892.html

【问题讨论】:

  • 如果你没有源,你将如何在同一个过程中做到这一点?你要注射吗?或者它是一个外壳扩展。
  • 我有应用程序的源代码,但没有第三方 DLL(它是一个 COM 服务器)

标签: winapi file-io process


【解决方案1】:

如果 DLL 不提供 FILE_SHARE_WRITE 访问权限,则您无法修改文件,其中包括使用 SetEndOfFile() 截断文件。因此,除非您修改 DLL,否则您将不走运。

【讨论】:

  • 即使我有加载 DLL 的进程的源代码也是如此?有什么方法可以直接查找和使用文件句柄?
  • 调用进程的来源无关紧要,因为DLL的来源是限制因素。不,除非您枚举进程的句柄,否则您将无法获取 DLL 的文件打开句柄。
  • 感谢您的回答。我决定通过仅显示日志文件的最新部分而不是修改日志文件来解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
相关资源
最近更新 更多