Low Level Console Input
Posted
by
Soulseekah
on Stack Overflow
See other posts from Stack Overflow
or by Soulseekah
Published on 2011-01-17T09:04:37Z
Indexed on
2011/01/17
10:53 UTC
Read the original article
Hit count: 241
I'm trying to send commands to to the input of a cmd.exe
application using the low level read/write console functions. I have no trouble reading the text (scraping) using the ReadConsole...()
and WriteConsole()
functions after having attached to the process console, but I've not figured out how to write for example "dir"
and have the console interpret it as a sent command.
Here's a bit of my code:
CreateProcess(NULL, "cmd.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
AttachConsole(pi.dwProcessId);
strcpy(buffer, "dir");
WriteConsole(GetStdHandle(STD_INPUT_HANDLE), buffer, strlen(buffer), &charRead, NULL);
STARTUPINFO
attributes of the process are all set to zero, except, of course, the .cb
attribute.
Nothing changes on the screen, however I'm getting an Error 6: Invalid Handle
returned from WriteConsole
to STD_INPUT_HANDLE
. If I write to (STD_OUTPUT_HANDLE)
I do get my dir
written on the screen, but nothing of course happens. I'm guessing SetConsoleMode()
might be of help, but I've tried many mode combinations, nothing helped. I've also created a quick console application that waits for input (scanf()
) and echoes back whatever goes in, didn't work.
I've also tried typing into the scanf()
promp and then peek into the input buffer using PeekConsoleInput()
, returns 0, but the INPUT_RECORD
array is empty.
I'm aware that there is another way around this using WriteConsoleInput()
to directly inject INPUT_RECORD structured events into the console, but this would be way too long, I'll have to send each keypress into it.
I hope the question is clear. Please let me know if you need any further information. Thanks for your help.
© Stack Overflow or respective owner