Would the patch below satisfy your needs? It will call the completion function with SUCCESS if any data was read (case (b)) and with EOF otherwise. Thinking about it, this is also consistent with the EOF conditions I've seen elsewhere (and my previous attempt wasn't:-().
This does still not fix the fact that ReadFileEx() doesn't detect EOF right away. I hope that is ok - I would really like to postpone the error handling of ReadFileEx() to the async handler unless it really breaks stuff. Inserting such code in ReadFileEx (andf ReadFile()?) would be a lot of hassle and possibly break IO on non-regular files.
Yes. Now my program does read the files without problems under wine. Contradicting to the real windows environment overlapped file i/o is not very fast, but at least it works. :-)
Thank's for your effort to find a solution for my litte problem.