Windows API 内で FormatMessage 関数を使用して、システム エラー コードからメッセージ文字列を生成しています。一部のエラー コードでは、完全なメッセージが作成されていないように見えることに気付きました。
例として、次のサンプル プログラムを取り上げます。
int main()
{
  wchar_t * buffer = nullptr;
  FormatMessageW(
    FORMAT_MESSAGE_FROM_SYSTEM 
    | FORMAT_MESSAGE_ALLOCATE_BUFFER 
    | FORMAT_MESSAGE_IGNORE_INSERTS, 
    nullptr, 
    ERROR_SYSTEM_PROCESS_TERMINATED,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    reinterpret_cast<LPWSTR>(&buffer), 
    0, 
    nullptr);
  std::wcout << buffer << std::endl;
  return 0;
}
MSDNによると、次のように表示されます。
{致命的なシステム エラー}
%hs システム プロセスは、ステータス 0x%08x (0x%08x 0x%08x) で予期せず終了しました。システムがシャットダウンされました。
ただし、サンプル プログラムでは次のように表示されます。
{致命的なシステム エラー}
%hs システム プロセスは、ステータス 0x で予期せず終了しました
ERROR_UNHANDLED_EXCEPTION完全なメッセージも作成されないことに気付きました (MSDN のリストと比較した場合)。予想される両方のメッセージには0x%08プレースホルダーが含まれていますが、メッセージは0xの後で終了します。
私が見る限り、他のエラー メッセージは MSDN のリストと一致しているようです (つまり、問題は と に限定されているようERROR_UNHANDLED_EXCEPTIONですERROR_SYSTEM_PROCESS_TERMINATED)。
engf-010 の功績 - Visual Studio でエラー ルックアップ ツール ([ツール] - [エラー ルックアップ]) を使用すると、同じ結果が得られます。エラー コードは 574 と 591 です。
これらのメッセージが切り取られている理由を誰か知っていますか?
とにかく完全なメッセージを取得する方法はありますか?