Я прочитал некоторые учебники в сети о том, как перенаправить стандартный ввод и вывод программы, но мне нужна помощь, как управлять им.
Пока у меня есть это:
HANDLE hSTD_OUT_READ;
HANDLE hSTD_OUT_WRITE;
HANDLE hSTD_IN_READ;
HANDLE hSTD_IN_WRITE;
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(saAttr);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
CreatePipe(&hSTD_OUT_READ,&hSTD_OUT_WRITE,&saAttr,0);
SetHandleInformation(hSTD_OUT_READ, HANDLE_FLAG_INHERIT, 0);
CreatePipe(&hSTD_IN_READ,&hSTD_IN_WRITE,&saAttr,0);
SetHandleInformation(hSTD_IN_WRITE, HANDLE_FLAG_INHERIT, 0);
memset(&cmdProcess,0,sizeof(cmdProcess));
memset(&cmdInfo,0,sizeof(cmdInfo));
cmdProcess.cb = sizeof(cmdProcess);
cmdProcess.dwFlags = STARTF_USESTDHANDLES;
cmdProcess.hStdError = hSTD_OUT_WRITE;
cmdProcess.hStdOutput = hSTD_OUT_WRITE;
cmdProcess.hStdInput = hSTD_IN_READ;
CreateProcess(NULL,"cmd.exe",NULL,NULL,TRUE,0,NULL,NULL,&cmdProcess,&cmdInfo);
DWORD BytesWritten;
WriteFile(hSTD_IN_WRITE,&cmd,sizeof(cmd),&BytesWritten,NULL);
CloseHandle(hSTD_OUT_WRITE);
DWORD BytesRecvd;
while(true)
{
bSUCCESS = ReadFile(hSTD_OUT_READ,&recvd,sizeof(recvd),&BytesRecvd,NULL);
printf(recvd);
if( ! bSUCCESS || BytesRecvd == 0 ) break;
}
В этот момент я получил сообщение распечатки windows cmd, но это не было ожидаемой реакцией на мой стандартный ввод "whoami". Что мне делать?