Windows 使用dup2或类似工具重定向文件句柄

Windows 使用dup2或类似工具重定向文件句柄,windows,handle,dup2,Windows,Handle,Dup2,在process explorer中给出一个进程,我可以找到该进程的句柄;或者确实给定了一个文件名,我可以找到是否有任何进程具有这些文件的句柄 如果我理解正确,dup2可用于替换文件句柄,即,我可以将其指向qwe.abc,而不是指向文件xyz.abc的句柄。首先,这是正确的吗 下一个问题,假设以上是正确的,作为一个完全的新手,最简单的方法是什么?是否有一个程序或命令行可以为我运行?Windows中的C运行时提供了一个“低I/O”层,该层使用“文件描述符”包装文件句柄,以便与POSIX函数(如du

在process explorer中给出一个进程,我可以找到该进程的句柄;或者确实给定了一个文件名,我可以找到是否有任何进程具有这些文件的句柄

如果我理解正确,dup2可用于替换文件句柄,即,我可以将其指向qwe.abc,而不是指向文件xyz.abc的句柄。首先,这是正确的吗


下一个问题,假设以上是正确的,作为一个完全的新手,最简单的方法是什么?是否有一个程序或命令行可以为我运行?

Windows中的C运行时提供了一个“低I/O”层,该层使用“文件描述符”包装文件句柄,以便与POSIX函数(如
dup2
)一起使用,但这只是一个进程兼容性层,便于跨平台C代码。在Windows中,可以使用调用系统函数
NtDuplicateObject
DuplicateHandle
复制内核句柄。NT只允许复制到目标进程中未使用的任意句柄值。它不允许替换对其他内核对象的现有引用(不一定是文件——可能是事件、作业、进程、节等)。@eryksun感谢您提供的信息!如果我打开文件的第二个句柄(具有写访问权限),然后将文件修改为第二个文件的内容(使用问题中的示例-使用NtDuplicateObject将写访问句柄设置为xyz.abc,使xyz.abc的内容=qwe.abc的内容-基本上写入所有字节),我似乎可以获得所需的行为. 你觉得这可能吗?如果是这样,我的下一个问题是。。。如何从vb.net中执行此操作?为什么不尝试打开“xyz.abc”并重写它?无论如何,如果您具有对该进程的
PROCESS\u DUP\u HANDLE
访问权限,则可以使用WinAPI
DuplicateHandle
复制其中一个句柄。被复制的句柄无法获得对文件对象的额外访问权限。源句柄必须已经具有所需的写访问权限。另外,不要假设它是一个同步模式文件对象,也不要弄乱它的文件指针;使用
lpOverlapped
为通过
WriteFile
写入的数据显式设置偏移量0。无论哪种方式,重写正在使用的文件都是脆弱的;预期数据损坏或行为不当。