Winapi 如何清除同一Windows进程已打开的日志文件的内容?

Winapi 如何清除同一Windows进程已打开的日志文件的内容?,winapi,file-io,process,Winapi,File Io,Process,我在另一个DLL中的同一进程中有一些第三方代码,该DLL没有保存打开的日志文件的源代码,该日志文件是通过以下方式打开的: CreateFile(szFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 是否有任何方法可以在同一过程中清除此日志文件?使用相同的参数调用CreateFile显然会失败,因为我正

我在另一个DLL中的同一进程中有一些第三方代码,该DLL没有保存打开的日志文件的源代码,该日志文件是通过以下方式打开的:

CreateFile(szFile, GENERIC_WRITE,
         FILE_SHARE_READ,
         NULL, OPEN_ALWAYS,
         FILE_ATTRIBUTE_NORMAL,
         NULL);
是否有任何方法可以在同一过程中清除此日志文件?使用相同的参数调用CreateFile显然会失败,因为我正在请求写访问,而该文件只有文件共享读取


有没有一种方法可以在不要求管理员枚举本文中讨论的系统句柄的情况下获得原始句柄

如果DLL不提供
文件共享
访问,那么您就无法修改该文件,这将包括使用
SetEndOfFile()
截断该文件。因此,除非您修改DLL,否则您的运气不好。

如果您没有源代码,在同一个过程中您将如何执行此操作?你要注射吗?或者它是一个shell扩展。我有应用程序的源代码,但没有第三方DLL(它是COM服务器),即使我有加载DLL的进程的源代码,也是如此?有没有直接查找和使用文件句柄的方法?调用进程的源是不相关的,因为DLL的源是限制因素。不,除非您枚举进程的句柄,否则无法获取文件的DLL打开句柄。谢谢您的回答。我决定通过显示日志文件的最近部分来解决这个问题,而不是修改日志文件。