0

我知道我可以调用AttachConsoleGetStdHandlekernel32 函数来访问不同控制台进程的控制台屏幕缓冲区,但是如果此进程的输入/输出/错误重定向到文件或设备,我如何才能获得这些重定向位置的句柄呢?

说清楚:我无法控制我试图附加到的应用程序,这是由第三方提供的,所以我使用 IPC 的机会很小。

4

2 回答 2

2

GetStdHandle将尊重任何重定向并返回重定向的句柄

进程的标准句柄可以通过调用来重定向 SetStdHandle,在这种情况下GetStdHandle 返回重定向的句柄

该链接还描述了如何索取原件。

于 2012-09-03T16:56:17.430 回答
0

您可以使用CreateRemoteThread将代码插入其他进程并GetStdHandle从那里调用。然后,您需要使用DuplicateHandle在您自己的进程中制作句柄的副本。

请记住,您对该句柄所做的任何事情都会影响目标进程中的句柄,这可能会导致意外问题。例如,如果两个进程都尝试从标准输入流中读取,您将无法预测哪个进程会看到输入的哪一部分,并且如果两个进程都写入标准输出流,则输出可能会随机重叠方式或一组输出可能会覆盖另一组。

于 2012-09-03T20:25:30.667 回答