WriteFileでUNICODEテキストをファイルに書き込む

Windows API の WriteFile() をつかってファイルにUNICODEテキストを書き込んだものをテキストエディタで見ると文字化けするので、どうしたものかと調べてみたら、BOMとやらを書き込んでなかったのが原因らしい。
http://home.a03.itscom.net/tsuzu/programing/tips46.htm
つまり、UNICODEファイルには、先頭にエンディアンを示す 2byte の BOM [Byte Order Mark] を書き込まないといけないみたいなのです。

エンディアン BOM
トルエンディアン 0xFF, 0xFE
ビッグエンディアン 0xFE, 0xFF

常に追記でファイルを開く場合のコードは、以下のようになります。

// 存在したらそのファイルを開き、末尾に移動、存在しなければ作成してオープン.
HANDLE  hFile;  // 存在したら追記、無ければ作成するファイルのハンドル.
hFile   = CreateFile(   filename,               // ファイル名.
                        GENERIC_WRITE,          // アクセスの種類.
                        0,                      // 共有.
                        NULL,                   // 子プロセスへの継承設定.
                        OPEN_ALWAYS,            // 存在しない場合、作成.
                        FILE_ATTRIBUTE_NORMAL,
                        NULL );
ASSERT( (hFile != INVALID_HANDLE_VALUE), "オープン失敗\n" );
// ファイルの末尾に移動.
DWORD   filepointer = SetFilePointer(   hFile,
                                        0,
                                        NULL,
                                        FILE_END );
ASSERT( (filepointer != 0xFFFFFFFF), "オープン失敗2\n" );
if( filepointer == FILE_BEGIN ){
    // 新しく開かれたファイルのとき.
    BOOL    br;
    DWORD   sizeWritten = 0;
    BYTE    bom[2]  = { 0xFF, 0xFE };   // リトルエンディアンのBOM.
    br = WriteFile( hFile,
                    bom,
                    (DWORD)(sizeof(bom)),
                    &sizeWritten,
                    0
                    );
    ASSERT( (br==TRUE), "BOM書き込み失敗.\n" );
}