書き込み中のログオフまたは中断の防止

アプリケーション内で適切な予防措置が講じられない場合、ユーザーが書き込み操作中にログオフすることがあります。 これにより書き込みプロセスが中断されると、データが失われ、ディスクが使用できなくなる可能性があります。

この問題を回避するには、ログオフする前に配信される WM_QUERYENDSESSION メッセージをアプリケーションで処理する必要があります。 アプリケーションが書き込み操作の実行中にこのメッセージを受信した場合は、FALSE を返してログオフのプロセスを取り消します。 アプリケーションでユーザーがログオフを続行するかどうかを決定できる場合は、ユーザーがデータを失う可能性があることを示す警告を表示する必要があります。

書き込みプロセス中の電源遷移によって、正常な書き込みアクティビティに潜在的な問題が発生する可能性もあります。 書き込みプロセス中のこうした問題を防ぐには、電源遷移が行われるタイミングをアプリケーションが把握する必要があります。 これは、アプリケーションでの WM_POWERBROADCAST メッセージの処理を許可することで実現されます。 Windows XP または Windows Server 2003 用に開発されたアプリケーションでは、PBT_APMQUERYSUSPEND に応答して BROADCAST_QUERY_DENY を返します。これにより、書き込みプロセス中の中断を防ぐことができます。

Windows Vista および Windows Server 2008 の電源管理モデルの変更により、PBT_APMQUERYSUSPEND イベントがアプリケーションに配信されなくなりました。 代わりにPBT_APMSUSPEND イベントが配信され、アプリケーションは 2 秒間で遷移に備えることができます。

これらの変更の結果として、アプリケーションで SetThreadExecutionState 関数を呼び出すようにすることをお勧めします。これにより、通常は遷移の中断につながるシステム アイドル タイムアウトが防止されます。 適切なフラグを設定してこの関数を呼び出すと、実行中の中断ではなく、システムのアイドル状態の中断のみが防止されることに注意してください。

IMAPI の使用

SetThreadExecutionState