Наступив на все грабли самостоятельно, нашел вот такую статью:
Capturing console I/O in Win32. Всё правильно пишут. У hlds.exe ввод идет по ReadConsoleInput. Попробовал через AttachConsole и WriteConsoleInput. Работает посылка команд. Но при этом, соответственно не работает захват вывода через пайпы. Можно грабить с консоли.
В варианте с втыканием пайпов на вход/выход, в hlds.exe отваливается GetNumberOfConsoleInputEvents (возвращает FALSE). Возможно это можно как-то починить, может нет. Я не разобрался как срастаются std in/out с консолью. Вроде у консоли должны быть свои, но практика с захватом вывода через трубу говорит что не совсем всё так.