1

I used to have an application which launched an application using CreateProcess() and then piped data back and forth. The child process used printf() and getch().

The code had:

PeekNamedPipe(pCmdIF->m_asynch_hReadPipeOut,NULL,NULL,NULL, &dwBytesInOutPipe, &dwBytesLeftInOutPipe))

Which checked how much data was in the incoming pipe and then I used ReadFile to read that data.

Now, in Windows 7 that same code does not work.

To create the pipe I used the code ...

// 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;
}

Is it a case that m_asynch_sa.lpSecurityDescriptor should not be set to NULL. If that is the case, I cannot find any example of how to set it to a proper value.

Thank you in advance.

kit
  • 1,166
  • 5
  • 16
  • 23
MTailor
  • 39
  • 3

0 Answers0