重复处理读取文件

时间:2016-11-14 10:25:53

标签: c++ winapi

我有一个由进程A(第三方应用程序)专门打开的文件。我显然无法在我的应用程序中打开该文件,所以我想到了使用DuplicateHandle API复制句柄。

但是,我意识到文件句柄位置的变化也会反映在进程A中,这可能会导致意外行为。有没有办法可以复制文件句柄进行读取,而不会影响进程A中的文件句柄(位置)?

2 个答案:

答案 0 :(得分:2)

没办法。文件的RewriteCond %{THE_REQUEST} \.html\sHTTP RewriteRule ^([^.]+)\.html$ /$1 [NC,R=301,L] RewriteCond %{REQUEST_URI} !\.html$ RewriteRule ^ %{REQUEST_URI}.html [L] 实际上是指向FILE_OBJECT的间接指针,如果文件以同步模式(HANDLE)打开,则FileObject->Flags & FO_SYNCHRONOUS_IO用作文件指针偏移。复制句柄时,您共享相同的FILE_OBJECT.CurrentByteOffset。为了拥有独立的文件指针,您需要在文件中打开另一个独立的FILE_OBJECT / FILE_OBJECT

答案 1 :(得分:1)

我终于明白了:

  1. 首先,您需要使用NtQuerySystemInformationDuplicateHandle API创建重复文件句柄。

  2. 现在使用重复句柄CreateFileMapping句柄,然后使用MapViewOfFile。 MapViewOfFile将文件的某些部分映射到您的进程地址空间,可用于读取文件而不会干扰原始文件句柄的当前文件偏移量。

  3. 希望这有助于某人。