重复句柄读取文件
Duplicate Handle to Read file
我有一个由进程a(第三方应用程序)独占打开的文件。我显然无法在我的应用程序中打开文件,所以我想到使用DuplicateHandle API复制句柄。
然而,我意识到文件句柄位置的变化也会反映在进程A中,这可能会导致不希望的行为。是否有一种方法可以复制文件句柄用于读取,而不影响进程a中的文件句柄(位置)?
不行。指向文件的HANDLE
实际上是指向FILE_OBJECT
的间接指针,如果文件以同步模式打开(FileObject->Flags & FO_SYNCHRONOUS_IO
),则使用FILE_OBJECT.CurrentByteOffset
作为文件指针偏移量。当您复制句柄时,您共享相同的FILE_OBJECT
。为了有一个独立的文件指针,你需要打开另一个独立的FILE_OBJECT
/HANDLE
文件。
我终于想通了:
-
首先,你需要使用NtQuerySystemInformation和DuplicateHandle API创建一个Duplicate文件句柄。
-
使用重复句柄现在CreateFileMapping句柄和MapViewOfFile之后。MapViewOfFile将文件的某些部分映射到进程地址空间,可以用来读取文件,而不会干扰原始文件句柄的当前文件偏移量
相关文章:
- 正在将csv文件读取为双精度矢量
- 将从格式化文本文件读取的文本数据存储到链表
- C++ 读取文件读取文件不正确
- 使用对象文件读取三角形数据网格
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 从文件读取,并写入函数C++中的数组
- 从对象C++中的文件读取内容时出现分段错误
- 从文件读取并通过矢量输出到控制台
- 尝试将字符串从文件读取到无符号字符向量中
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 简化文件读取的函数
- 如何将逗号分隔的文件读取为 2D int 数组?
- 在 c++ 中将数据从文件读取到队列中
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 文件读取C++包括空格键
- 从文件读取时未将值推回矢量
- 从文件 C++ 读取时的无限循环
- 从同一文件读取和写入?
- 从.txt文件读取到C++中的双精度向量