Win32, ReadFile del bloque de la tubería incluso después de que el niño terminó

Tengo un programa simple (en C) que crea dos procesos secundarios, espera cada uno en un conducto heredado y coloca la salida en un archivo.

Todo funciona bien, excepto que después de un ciclo de escritura / lectura en la tubería dos, cuando el niño termina, la llamada a ReadFile se bloquea, esperando datos en la tubería. Yo uso el siguiente patrón:

...
//create pipe1
CreatePipe(&hReadDup,&hWrite,&saAttr,0);
DuplicateHandle(GetCurrentProcess(),hReadDup,GetCurrentProcess(),&hRead,0,FALSE,DUPLICATE_SAME_ACCESS);
CloseHandle(hReadDup);


si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hWrite;   

CreateProcess(  NULL,
        const_cast<LPWSTR>(cmd2.c_str()), //the command to execute
        NULL,
        NULL,
        TRUE,
        0,
        NULL,
        NULL,
        &si, //si.
        &pi
    );

...
CloseHandle(hWrite); // EDIT: this was the operation not properly done!

while(cont){
    ...
    cont = ReadFile(hRead,buf,50, &actual,NULL);
    ...
}
... 

El bloque de la última llamada (después de la salida del proceso hijo). ¿Idea de por qué (y, si no, cómo depurar esto)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta