小编Cap*_*der的帖子

是否有可能伪造Windows控制台API?

我已经在c#中编写了一个ssh服务器,我认为将PowerShell作为shell连接是很好的.我已经尝试了两种方法来使其正常工作,但两者都远非完美.这是我尝试过的:

  1. 启动powershell.exe并重定向它的std(in/out).这不能很好地工作,因为powershell.exe检测到它被重定向,改变了它的行为.更重要的是,它期望stdid上的输入数据,而不是命令.所以它使用控制台api来读取命令.
  2. 在"包装器"应用程序中托管powershell.这具有能够为powershell提供"控制台"实现的优点(通过PSHostRawUserInterface).这样可以更好地工作,但您仍然可以调用命令(主要是真正的控制台应用程序),例如"... | more",希望能够使用控制台api,然后尝试从包装器进程的控制台读取.

所以我想做的是有一组函数替换控制台应用程序使用的常规控制台输入/输出函数,所以我可以处理它们.但这似乎相当激烈,以至于成为一个糟糕的设计理念(imo).

现在我的想法是通过发送具有本机/ Pinvoke函数(如WriteConsoleInput)的相关键来操纵控制台.我认为有可能以这种方式伪造控制台.但我不知道如何"读取"控制台上发生的事情.

还要记住,这是一项服务,所以最好它不应该产生一个真正的控制台窗口,尽管可能在Windows会话0中不会出现并且无关紧要.

c# powershell windows-console

11
推荐指数
1
解决办法
992
查看次数

标签 统计

c# ×1

powershell ×1

windows-console ×1