>>299
まずは、(Exのついていない)WriteFile()を使って非同期書き込みを行うプログラムを書いて見ることを強く勧める。
そうすれば、「WriteFileEx 関数を使う場合、この関数が「成功」を示す値を返していても、それだけでは不十分です。」
の意味が理解できると思う。

>>300のコメントにあるようにWriteFileExが非0を返したあとにGetLastErrorを呼んでも無意味。
GetOverlappedResultが0を返したとき、GetLastErrorを使う。