Приложение для Windows, использующее PeekNamedPipe (), используется для работы в XP, но не в Win7 - PullRequest
0 голосов
/ 18 ноября 2018

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

Заранее спасибо.

...