Услуги:
Создает стандартный вывод в именованных каналах. Присоединяет их к процессу, который он создает.
HANDLE hStdOut = CreateNamedPipe(szStdOutPipeName,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE,
1,
100,
100,
15000,
pSa);
yStartupInfo.hStdOutput = hStdOut;
CreateProcessAsUserW( ..., yStartupInfo, ... );
Эта часть работает. Вывод созданного процесса перенаправляется в каналы.
Клиент:
Соединение с именованным каналом, успешно. Проверьте, есть ли байты для считывания с просмотром (в этот момент байты помещаются в канал!). Затем прочитайте байты из канала.
hStdOutPide = CreateFileW(szPipeNameStdOut,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL );
PeekNamedPipe(hStdOutPide,
szBuffer,
kunBufferSize,
&ulBytesRead,
&ulBytesAvailable,
&ulRemainingBytes);
if( ulBytesAvailable > 0)
ReadFile(hStdOutPide, szBuffer, 1000, &ulBytesRead, NULL)
Я удалил окружающий код, который проверяет правильность дескрипторов, процесс запущен и т. Д.
Пик показывает, что ulRemainingBytes
- это ВСЕГДА 0
. Кто-нибудь видит, где может быть моя ошибка? Я пытался заставить это работать в течение некоторого времени, и я не знаю, каковы правильные флаги для чего-либо. Пожалуйста, спросите, нужна ли вам дополнительная информация!
Атрибуты безопасности в CreateNamesPipe генерируются методом. Он используется во многих других местах кода, поэтому я не думаю, что проблема там.
Спасибо.