Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int _tmain(int argc, _TCHAR* argv[])
- {
- //create pipe for the console stdout
- SECURITY_ATTRIBUTES sa;
- ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
- sa.nLength = sizeof(SECURITY_ATTRIBUTES);
- sa.bInheritHandle = true;
- sa.lpSecurityDescriptor = NULL;
- HANDLE ReadPipeHandle;
- HANDLE WritePipeHandle; // not used here
- if (!CreatePipe(&ReadPipeHandle, &WritePipeHandle, &sa, 0))
- return -1;
- //Create a Console
- STARTUPINFO si;
- ZeroMemory(&si, sizeof(STARTUPINFO));
- si.cb = sizeof(STARTUPINFO);
- si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
- si.wShowWindow = SW_HIDE;
- si.hStdOutput = WritePipeHandle;
- si.hStdError = WritePipeHandle;
- PROCESS_INFORMATION pi;
- ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
- if (!CreateProcess(_T("c:\\Windows\\System32\\cmd.exe"), NULL, NULL, NULL, true, 0, NULL, NULL, &si, &pi))
- return -1;
- //Read from pipe
- char Data[1024];
- ZeroMemory(Data, 1024);
- for (;;)
- {
- DWORD BytesRead;
- DWORD TotalBytes;
- DWORD BytesLeft;
- //Check for the presence of data in the pipe
- if (!PeekNamedPipe(ReadPipeHandle, Data, sizeof(Data), &BytesRead,
- &TotalBytes, &BytesLeft)) return -1;
- //If there is bytes, read them
- if (BytesRead)
- {
- if (!ReadFile(ReadPipeHandle, Data, sizeof(Data) - 1, &BytesRead, NULL))
- return -1;
- puts(Data);
- }
- else
- {
- //Is the console app terminated?
- if (WaitForSingleObject(pi.hProcess, 0) == WAIT_OBJECT_0)break;
- }
- }
- CloseHandle(pi.hThread);
- CloseHandle(pi.hProcess);
- CloseHandle(ReadPipeHandle);
- CloseHandle(WritePipeHandle);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement