Я полагаю, вы используете функцию канала (из msvcrt.dll):
function _pipe(phandles : pointer; psize : uint; textmode : integer) : integer; cdecl; external 'msvcrt.dll' name '_pipe';
некоторый псевдокод:
var
_handles : array[0..1] of THandle;
begin
if _pipe(@_handles, size, 0) = -1 then
Exit;
FReadHandle := _handles[0];
FWriteHandle := _handles[1];
_write(FVirtualWriteHandle, Buffer, size);
close(FWriteHandle);
close(FReadHandle);
end;