我有一个由进程A(第三方应用程序)专门打开的文件。我显然无法在我的应用程序中打开该文件,所以我想到了使用DuplicateHandle API复制句柄。
但是,我意识到文件句柄位置的变化也会反映在进程A中,这可能会导致意外行为。有没有办法可以复制文件句柄进行读取,而不会影响进程A中的文件句柄(位置)?
答案 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)
我终于明白了:
首先,您需要使用NtQuerySystemInformation和DuplicateHandle API创建重复文件句柄。
现在使用重复句柄CreateFileMapping句柄,然后使用MapViewOfFile。 MapViewOfFile将文件的某些部分映射到您的进程地址空间,可用于读取文件而不会干扰原始文件句柄的当前文件偏移量。
希望这有助于某人。