Q:

Will a process writing to a pipe block if the pipe is full? 

I'm currently diving into the Win32 API and writing myself a wrapper class for CreateProcess and CreatePipe.  I was just wondering what will happen if a process that I opened writes too much output for the pipe buffer to hold.  Will the process wait until I read from the other end of the pipe?  The Remark of the CreatePipe function suggests so:

When a process uses WriteFile to write to an anonymous pipe, the write operation is not completed until all bytes are written.  If the pipe buffer is full before all bytes are written, WriteFile does not return until another process or thread uses ReadFile to make more buffer space available. 

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365152%28v=vs.85%29.aspx
Let's assume I open a process with CreateProcess, then use WaitForSingleObject to wait until the process exits.  Will the process ever exit if it exceeds the buffer size of its standard output pipe? 

A:

WaitForSingleObject on a process with redirected output is indeed a deadlock.   You need to keep the output pipe drained in order to let the child process run to completion. 
Generally you would use overlapped I/O on the pipe and then WaitForMultipleObjects on the handle pair1 (process handle, pipe read event handle) in a loop until the process handle becomes signaled. 
Raymond Chen wrote about the scenario when the input is also piped:

Be careful when redirecting both a process's stdin and stdout to pipes, for you can easily deadlock

1 As Hans commented, there can be more than one output stream.   stdout, stderr are typical, even more are possible through handle inheritance.   Drain all the pipes coming out of the process.