我曾经有一个应用程序,该应用程序使用CreateProcess()
启动了一个应用程序,然后来回传输数据。子进程使用printf()
和getch()
。
代码具有:
PeekNamedPipe(pCmdIF->m_asynch_hReadPipeOut,NULL,NULL,NULL, &dwBytesInOutPipe, &dwBytesLeftInOutPipe))
哪个检查了传入管道中有多少数据,然后我使用ReadFile读取了这些数据。
现在,在Windows 7中,相同的代码不起作用。
要创建管道,我使用了代码...
// Set the bInheritHandle flag so pipe handles are inherited.
ZeroMemory( &m_asynch_sa, sizeof(SECURITY_ATTRIBUTES));
m_asynch_sa.bInheritHandle = TRUE;
m_asynch_sa.lpSecurityDescriptor = NULL;
m_asynch_sa.nLength = sizeof(SECURITY_ATTRIBUTES);
// Create a pipe for the child process's STDOUT (will also be used for STDERR)
if( ! CreatePipe( &m_hChildStd_OUT_Rd, &m_hChildStd_OUT_Wr, &m_asynch_sa, 0 ) )
{
return 2;
}
是否应该将m_asynch_sa.lpSecurityDescriptor
设置为NULL。如果是这样,我找不到如何将其设置为适当值的任何示例。
谢谢。