Win32APIで非同期書き込み

・CreateFile() FILE_SHARE_WRITE FILE_FLAG_OVERLAPPED
・AのWriteFile() OVERLAPPED構造体のOffsetとOffsetHighに指定する書き込み開始位置に、
 現在のファイルサイズを指定(後述するが0xFFFFFFFFでの追記は避けること)
・BのWriteFile() OVERLAPPED構造体のOffsetとOffsetHighにBで渡したファイルサイズ+Aで書き込むサイズ

WriteFile()は指定サイズ全てを1回で書き込めるとは限らないので、書き込んだサイズ分
OffsetとOffsetHighをずらしながら残りをWriteFile()する。
位置をずらして指定していくのとBの分を並列で書き込むので0xFFFFFFFFでの追記を行ってはならない。

書き込んだサイズは
・GetOverlappedResult()で調べる(呼ぶタイミングが分からない)
・WriteFileEx()でlpCompletionRoutineを指定する(完了ルーチンでWriteFileEx()を繰り返すとスタックが溢れる恐れあり)
・IOCP
・スレッドプールI/O
のいずれかを使う。

C#で同等のことを行う方法は知らん。