另一个进程文件句柄上的SetFilePointer()失败

Dav*_*íaz 0 c# windows 64-bit winapi

我正在为第三方不可触及的控制台可执行文件制作GUI.此可执行文件读取输入文件,处理数据并生成输出文件.由于这个过程需要很长时间,我需要监控进度.

我想要做的是找到控制台可执行进程id(完成),进程id检索进程打开的文件列表(完成),然后,一旦识别出输入文件并且它的句柄被检索(完成) ,我想调用SetFilePointer(handle,0,currentPosition),因此它告诉我已经读取了多少文件.然后,(read/totalSize)将为我提供该过程的进度.

问题是调用SetFilePointer()总是返回0xFFFFFFFF(失败)而GetLastError()返回6(无效句柄).有任何想法吗?

先感谢您.

Dav*_*nan 5

手柄属于拥有过程,只能由拥有过程操作.如果要修改另一个进程中的句柄,则需要将代码注入该进程或使用DuplicateHandle.

  • 是否可以使用DuplicateHandle()作为解决方法?我的意思是,一旦我有原始文件句柄,我复制它并在复制的文件上调用SetFilePointer(). (2认同)
  • 是的,我认为这会奏效.对不起,我原本忘记了.我认为如果两个进程同时访问文件指针,您可能会遇到线程安全问题.我知道你的修改是良性的,但我想知道如果你在目标应用程序修改文件的同时读取文件指针会发生什么. (2认同)