ReserveAndAppendLog 関数 (clfsw32.h)

ログ バッファーの領域を予約するか、ログ レコードをログに追加するか、またはその両方を行います。 関数はアトミックです。

構文

CLFSUSER_API BOOL ReserveAndAppendLog(
  [in]                PVOID             pvMarshal,
  [in, optional]      PCLFS_WRITE_ENTRY rgWriteEntries,
  [in]                ULONG             cWriteEntries,
  [in, optional]      PCLFS_LSN         plsnUndoNext,
  [in, optional]      PCLFS_LSN         plsnPrevious,
  [in]                ULONG             cReserveRecords,
  [in, out, optional] LONGLONG []       rgcbReservation,
  [in]                ULONG             fFlags,
  [out, optional]     PCLFS_LSN         plsn,
  [in, out, optional] LPOVERLAPPED      pOverlapped
);

パラメーター

[in] pvMarshal

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

[in, optional] rgWriteEntries

1 つのレコードにマーシャリングCLFS_WRITE_ENTRYバッファーの配列へのポインター。

cWriteEntries パラメーターが 0 の場合、このパラメーターは無視されます。

[in] cWriteEntries

rgWriteEntries 配列内の書き込みエントリの数。

この値が 0 以外の場合は、 rgWriteEntries パラメーターにバッファーを指定する必要があります。

[in, optional] plsnUndoNext

元に戻すチェーン 内の次 のレコードのログ シーケンス番号 (LSN) を指定するCLFS_LSN構造体へのポインター。

[in, optional] plsnPrevious

前の チェーン内の 前のレコードの LSN を指定するCLFS_LSN構造体へのポインター。

[in] cReserveRecords

rgcbReservation 配列内のレコード サイズの数。

[in, out, optional] rgcbReservation

cReserveRecords パラメーターが指定する各レコードの予約サイズの配列へのポインター。

cReserveRecords パラメーターが 0 の場合、このパラメーターは無視されます。 予約サイズが負の場合は、そのサイズの予約が解放されます。

各レコードに予約されている実際の領域 (必要なオーバーヘッドを含む) は、正常に完了すると、個々の配列要素で返されます。 これらの値を FreeReservedLog 関数に渡して、マーシャリング領域に予約されている領域を調整できます。

[in] fFlags

この関数の動作を指定するフラグ。

次の値のうち 1 つ以上を組み合わせることができます。

意味
CLFS_FLAG_FORCE_APPEND
以前に物理的な場所が割り当てられていないログに追加されたすべてのレコードに物理的な場所を割り当てます。

これらのレコードはすべて、他のマーシャリング コンテキストからの読み取りに使用できます。

CLFS_FLAG_FORCE_FLUSH
以前に物理的な場所が割り当てられていないログに追加されたすべてのレコードに物理的な場所を割り当てます。

これらのレコードはすべて、他のマーシャリング コンテキストからの読み取りに使用できます。 その後、レコードがディスクにフラッシュされます。

CLFS_FLAG_NO_FLAGS
フラグを割り当てない。
CLFS_FLAG_USE_RESERVATION
マーシャリング領域に予約されている領域を使用して、現在のレコードを追加します。

[out, optional] plsn

追加されたレコードの LSN を受け取る CLFS_LSN 構造体へのポインター。

[in, out, optional] pOverlapped

OVERLAPPED 構造体へのポインター。

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

戻り値

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

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

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

注釈

ReserveAndAppendLog 関数によって返される LSN は、必ずしも使用される次の LSN とは限りません。 返される LSN は次の LSN の推定値であり、 fFlags パラメーターで指定されるフラグによって異なります。 返される LSN は、ベース尾部を移動するときに使用できます。 この LSN は、この関数の次の呼び出しによって無効になります。

ReserveAndAppendLog 関数がERROR_LOG_FILE_FULLを返す場合、ログに領域はもうありません。 これは、次のいずれかの方法で解決できます。

  • 不要な予約をすべて無料で提供します。
  • コンテナーをリサイクルするには、基本 LSN またはログ アーカイブの末尾、またはその両方を進めます。
  • コンテナーをログに追加します。
CLFS Management API には、完全なログを含むシナリオを処理する方法も用意されています。

ReserveAndAppendLog 関数が有効な pOverlapped 構造体を使用して呼び出され、ログ ハンドルが重複するオプションで作成された場合、この関数の呼び出しがERROR_IO_PENDINGのエラー コードで失敗した場合、有効な読み取りコンテキストへのポインターが ppvReadContext パラメーターによって指される変数に配置されます。

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

要件

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

こちらもご覧ください

CLFS_LSN

CLFS_WRITE_ENTRY

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

OVERLAPPED