I think the second parameter is wrong. Here is the prototype of the function:
void glReadPixels( GLint x,
GLvoid* data );
The first two parameters are the location to begin reading. The second parameter, y, should probably be 0 also but certainly not winHeight because that would be an invalid value. The y parameter can be winHeight-1 at most.