我知道我可以调用AttachConsole
和GetStdHandle
kernel32函数来访问不同控制台进程的控制台屏幕缓冲区,但是如果此进程将其输入/输出/错误重定向到文件或设备,我怎样才能获得这些重定向位置的句柄?
说清楚:我无法控制我试图附加的应用程序,这是由第三方提供的,所以我使用IPC的机会很少。
答案 0 :(得分:2)
GetStdHandle
将遵循任何重定向并返回redirected handle;
进程的标准句柄可以通过调用重定向
SetStdHandle
,在这种情况下,GetStdHandle
会返回重定向的内容 处理
该链接还描述了如何申请原件。
答案 1 :(得分:0)
您可以使用CreateRemoteThread
将代码插入其他进程并从那里调用GetStdHandle
。然后,您需要使用DuplicateHandle
在您自己的流程中制作句柄的副本。
请记住,使用该句柄执行的任何操作都会影响目标进程中的句柄,这可能会导致意外问题。例如,如果两个进程都试图从标准输入流中读取,那么您将无法预测哪一个将看到输入的哪一部分,并且如果两个进程都写入标准输出流,则输出可能会随机重叠方式或一组输出可能会覆盖另一方。