ReadLogRestartArea 関数 (clfsw32.h)

WriteLogRestartArea のマーシャリング領域に関連付けられたログに正常に書き込まれた最後の再起動領域を返します。 関数は読み取りコンテキストも返します。これにより、呼び出し元は、再起動レコードからログを後方または前方にカーソルを移動できます。

この読み取りコンテキストは、 ReadPreviousLogRestartArea を呼び出して、現在の再起動領域より前の再起動領域をスキャンする場合に便利です。

構文

CLFSUSER_API BOOL ReadLogRestartArea(
  [in]                PVOID        pvMarshal,
  [out]               PVOID        *ppvRestartBuffer,
  [out]               PULONG       pcbRestartBuffer,
  [out]               PCLFS_LSN    plsn,
  [out]               PVOID        *ppvContext,
  [in, out, optional] LPOVERLAPPED pOverlapped
);

パラメーター

[in] pvMarshal

CreateLogMarshallingArea 関数を使用して割り当てられるマーシャリング コンテキストへのポインター。

[out] ppvRestartBuffer

ログ I/O ブロック内の再起動データへのポインターを受け取る変数へのポインター。

[out] pcbRestartBuffer

再起動データの量を受け取る変数へのポインター。

[out] plsn

再起動領域のログ シーケンス番号 (LSN) を受け取る CLFS_LSN 構造体へのポインター。

[out] ppvContext

読み取りが成功したときにシステム割り当て読み取りコンテキストへのポインターを受け取る変数へのポインター。

関数は、操作の完了を延期すると、有効な読み取りコンテキスト ポインターと エラー状態ERROR_IO_PENDINGを返します。 その他のすべてのエラーでは、読み取りコンテキスト ポインターは NULL です。 関数の遅延完了の処理の詳細については、このトピックの「解説」セクションを参照してください。

要求されたすべてのログ レコードを取得した後、クライアントは読み取りコンテキストを TerminateReadLog に渡して、関連付けられているメモリを解放する必要があります。 これを行わないと、メモリリークが発生します。

メモ 共通ログ ファイル システム (CLFS) の読み取りコンテキストはスレッド セーフではありません。 一度に複数のスレッドで使用したり、一度に複数の非同期読み取りに渡したりしないでください。
 

[in, out, optional] pOverlapped

非同期操作に必要な OVERLAPPED 構造体へのポインター。

非同期操作を使用しない場合、このパラメーターは NULL にすることができます

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

次の一覧は、考えられるエラー コードを示しています。

解説

CreateLogMarshallingArea で指定されたログ ブロック サイズが、完全なログ ブロックを保持するのに十分な大きさでない場合は、エラー メッセージ ERROR_LOG_BLOCK_INCOMPLETEが返されます。

通常、 ReadLogRestartArea は、クラッシュ後または通常のシャットダウン後に、クライアントの再起動中にのみ使用されます。

ログに再起動領域がない場合、 ReadLogRestartArea はコード ERROR_LOG_NO_RESTARTで失敗します。

ERROR_IO_PENDINGのエラー コードで ReadLogRestartArea が失敗した場合、ppvReadContext パラメーターが指す変数に有効な読み取りコンテキストへのポインターが配置されます。

ログ レコードのコピーを完了するには、クライアントはまず、 GetOverlappedResult またはいずれかの同期 待機関数を呼び出して、重複した I/O 操作の遅延完了と実行を同期する必要があります。 詳細については、「 同期」と「入力と出力の重複」を参照してください。

ReadLogRestartArea が非同期的に完了すると、要求された再起動領域はディスクから読み取られますが、有効なポインターは *ppvRestartBuffer に配置されません。

有効なポインターを取得するには、クライアントは ReadPreviousLogRestartArea を呼び出す必要があります。 ReadLogRestartArea によって返される読み取りコンテキスト ポインターを渡します。

メモ 共通ログ ファイル システム (CLFS) の読み取りコンテキストはスレッド セーフではありません。 一度に複数のスレッドで使用しないでください。

CLFS 読み取りコンテキストは、一度に複数の非同期読み取りに渡さないでください。または、関数がERROR_BUSYで失敗します。

 

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 R2 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー clfsw32.h
Library Clfsw32.lib
[DLL] Clfsw32.dll

関連項目

CLFS_LSN

一般的なログ ファイル システム関数

CreateLogFile

OVERLAPPED

ReadPreviousLogRestartArea

同期と重複入力と出力

WriteLogRestartArea