Раньше у меня было приложение, которое запускало приложение, используя 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. Если это так, я не могу найти ни одного примера того, как установить правильное значение.
Заранее спасибо.