Можно ли подделать api консоли Windows?

Я написал ssh-сервер на C # и подумал, что было бы неплохо подключить PowerShell в качестве оболочки. Я пробовал 2 метода, чтобы заставить это работать должным образом, но оба далеки от совершенства. Вот что я пробовал:

  1. Запустить powershell.exe и перенаправить его на стандартный ввод / вывод. Это не работает , поскольку powershell.exe обнаруживает, что он перенаправлен, изменяет его поведение. Более того, он ожидает ввода данных в командах stdid, а не . Поэтому он использует API консоли для чтения команд.
  2. Размещение PowerShell в приложении-оболочке. Это имеет то преимущество, что может предоставить "консольную" реализацию для powershell (через интерфейс PSHostRawUserInterface).Это работает лучше, но вы все равно можете вызывать команды (в основном настоящие консольные приложения), такие как "... | more", которые ожидают, что сможет использовать консольный api, а затем попытаться читать из консоли процесса оболочки.

Я бы хотел, чтобы набор функций заменил обычные консольные функции ввода / вывода, которые используются консольными приложениями, чтобы я мог с ними справиться. Но это кажется довольно резким, вплоть до плохой дизайнерской идеи (imo).

Прямо сейчас у меня возникла идея манипулировать консолью, отправляя соответствующие ключи с помощью собственных функций / функций Pinvoke, таких как WriteConsoleInput. Я полагаю, что таким образом можно подделать консоль. Но я не понимаю, как бы я тогда «прочитал», что происходит на консоли.

Также имейте в виду, что это служба, поэтому желательно, чтобы она не порождала фактическое окно консоли, хотя, возможно, в сеансе Windows 0 это не будет отображаться и не имеет значения.

11
задан Captain Coder 26 October 2011 в 11:18
поделиться