PHP код:
;.....некий код
;Обнуляем буферы
mov ecx,1024
mov edi,offset BufDate1
l: mov byte ptr [edi],0
inc edi
loop l
mov ecx,1024
mov edi,offset BufDate
ll: mov byte ptr [edi],0
inc edi
loop ll
;--
я бы прилюдно растреливал за такой код ... несудьба использовать для того предназначенные цепочечные команды?
PHP код:
lea edi, BufDate
mov ecx, 512 ;=2048/4
xor eax, eax
rep stosd
одним махом оба буфера =\
далее, ReadFile ты вызываешь _синхроно_, те поток там ожидает пока придут все данные (размер ктр ты передавал) или пайп убъется:
MSDN
ReadFile returns when one of the following is true: a write operation completes on the write end of the pipe, the number of bytes requested has been read, or an error occurs
Естественно все будет замораживатся. Решение состоит либо в асинхронном вызове ReadFile (та самая структура overlapped + порты завершения ввода-вывода), что неплохо описано у Рихтера. Так придется поступать, когда не знаешь сколько байт запишет в пайп другой процесс.
PS
да, и заполнять в твоем случае структуру через eax слишком накладно по размеру и регистрам
вместо
mov eax, hRead ;6 байт
mov cif.hStdOutput,eax ;6 байт
используй
push dword [hRead] ;5 байт
pop dword [cif.hStdOutput] ;5 байт
хотя и медленнее, зато экономятся байтеги и освобождается регистр, ктр можно использовать при передаче нулевых значений функции (push reg короче чем push imm на 3 байта).