GetLastError への次の呼び出しを伴う CopyFileEx は、約 2 か月前 (おそらく 2015 年 12 月以降) から Win2012R2 でコピーが成功した場合でも、ERROR_INVALID_PARAMETER を返します。Windows XP から Windows 7 まで、および Win 2k3 から Win2k8R2 まででは、これは発生せず、GetLastError は常に 0 (ERROR_SUCCESS) を返します。
これは、この種の Win32 API の予想される動作ですか? 結果を確認するために、結果と GetLastError コードの両方を追加する必要がありますか?
この KB は問題に関連しているようですが、このパッチを適用しても API の動作は変わりません。問題が発生する原因となった別の KB があった可能性がありますが、見つけることができませんでした https://support.microsoft.com/en-us/kb/2963918
GetLastError のドキュメント:
戻り値
戻り値は、呼び出しスレッドの最後のエラー コードです。
最後のエラー コードを設定する各関数のドキュメントの戻り値のセクションには、関数が最後のエラー コードを設定する条件が記載されています。スレッドの最終エラー コードを設定するほとんどの関数は、失敗したときにそれを設定します。ただし、一部の関数は、成功したときに最後のエラー コードも設定します。関数が最後のエラー コードを設定するように文書化されていない場合、この関数によって返される値は、設定された最新の最後のエラー コードです。 一部の関数は、成功時に最後のエラー コードを 0 に設定し、他の関数は設定しません。