HANDLE 
hChildStdinRd,
hChildStdinWr,
hChildStdinWrDup,
hChildStdoutRd,
hChildStdoutWr,
hChildStdoutRdDup,
hSaveStdin,hSaveStdout;
DWORD dwProcessId;BOOL CreateChildProcess(DWORD & dwProcessId);HANDLE SafeFile;BOOL main(void)
{
SECURITY_ATTRIBUTES saAttr;
BOOL fSuccess; saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (!CreatePipe(&hChildStdoutRd, &hChildStdoutWr,&saAttr,0) )
{
cout << "Redirecting stdout failed \n" << endl;
return FALSE;
}
if (!SetStdHandle(STD_OUTPUT_HANDLE,hChildStdoutWr) )
{
cout << "Redirecting stdout failed \n";
return FALSE;
}
fSuccess = DuplicateHandle( GetCurrentProcess() , hChildStdoutRd,
GetCurrentProcess(), &hChildStdoutRdDup,0 ,FALSE,DUPLICATE_SAME_ACCESS );
if (!fSuccess)
{
cout << "DuplecateHandle failed \n" << endl;
return FALSE;
}
CloseHandle( hChildStdoutRd);
hSaveStdin = GetStdHandle(STD_INPUT_HANDLE);
if (!CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr,0) )
{
cout <<"Stdin pipe createion failed \n" << endl;
return FALSE;
}

if (!SetStdHandle(STD_INPUT_HANDLE,hChildStdinRd) )
{
cout << "Redirecting stdin failed \n" << endl;
return FALSE;
}
fSuccess = DuplicateHandle(GetCurrentProcess(), hChildStdinWr,
GetCurrentProcess(),&hChildStdinWrDup,
0,FALSE,
DUPLICATE_SAME_ACCESS);
if (!fSuccess)
{
cout << "DuplecateHandle failed \n" << endl;
return FALSE;
}
CloseHandle(hChildStdinWr);
if (!CreateChildProcess(dwProcessId) )
{
cout << "createchildprocess failed \n" << endl;
return FALSE;
} if (!SetStdHandle(STD_INPUT_HANDLE,hSaveStdin) )
{
cout << "re-redirecting Stdout failed \n" << endl;
return FALSE;
} if( !SetStdHandle(STD_OUTPUT_HANDLE,hSaveStdout) )
{
cout << "re-redirecting Stdout failed \n" << endl;
return FALSE;
} cout << "success" << endl;
CHAR buf[100] = {0};
DWORD WORD;
         
         //下面是得到子进程的输出
ReadFile(hChildStdoutRdDup,buf,sizeof(buf),&WORD,NULL);
cout << buf << endl;
cout << "buf end ...." << endl;
return TRUE;
}
请教我什么地方写的不正确阿