As the documentation for pipes reports, one process writes, another process reads. If you want to READ and WRITE, you will need two channels: one for "writing to another process" and one for "reading data from another process."
[This is not unique to Windows, but since you are asking about Windows handsets, I thought it was best to provide Windows documents. Linux / Unix channels are the same - they have two ends, the end of reading and the end of writing]
Of course, as noted in the commentary, it seems that the Windows documentation is rather inconsistent (and I only once used windows in one direction at a time).
As long as this example does not read and write SIMULTANEOUSLY, I think that it can be relatively easily changed so that it does.
I suspect (but since the code has not been sent) the problem is either in calling ReadFile, or when setting up the channel itself. The overridden calls in ReadFile are asynchronous, and before checking the results, you will have to wait for the event associated with the overlapped structure using WaitForMultipleObjects.
Obviously, if you are reading and writing at the same time, you need one overlapping structure for reading and one for writing to indicate which side is βcompletedβ.
source share