ClfsReserveAndAppendLog 関数 (wdm.h)

ClfsReserveAndAppendLog ルーチンは、マーシャリング領域の領域を予約するか、マーシャリング領域にレコードを追加するか、または両方をアトミックに行います。

構文

CLFSUSER_API NTSTATUS ClfsReserveAndAppendLog(
  [in]            PVOID             pvMarshalContext,
  [in, optional]  PCLFS_WRITE_ENTRY rgWriteEntries,
  [in]            ULONG             cWriteEntries,
  [in, optional]  PCLFS_LSN         plsnUndoNext,
  [in, optional]  PCLFS_LSN         plsnPrevious,
  [in]            ULONG             cReserveRecords,
  [in, out]       PLONGLONG         rgcbReservation,
  [in]            ULONG             fFlags,
  [out, optional] PCLFS_LSN         plsn
);

パラメーター

[in] pvMarshalContext

CLFS ストリームに関連付けられたマーシャリング領域を表す不透明なコンテキストへのポインター。 呼び出し元は、 ClfsCreateMarshallingArea を呼び出して、このポインターを以前に取得しました。

[in, optional] rgWriteEntries

CLFS_WRITE_ENTRY構造体の配列へのポインター。それぞれが、ログに追加されるレコードの一部となるデータのバッファーへのポインターを保持します。 cWriteEntries が 0 の場合、このパラメーターは NULL にすることができます。

[in] cWriteEntries

rgWriteEntries が指す配列内の要素の数。 rgWriteEntriesNULL の場合、このパラメーターは 0 である必要があります。

[in, optional] plsnUndoNext

追加する レコードの元 に戻す次の LSN を提供するCLFS_LSN構造体へのポインター。

[in, optional] plsnPrevious

追加するレコードの前の LSN を提供するCLFS_LSN構造体へのポインター。

[in] cReserveRecords

rgcbReservation が指す配列内の要素の数。 rgcbReservationNULL であるか、fFlags のCLFS_FLAG_USE_RESERVATION フラグが設定されている場合、このパラメーターは 0 である必要があります。

[in, out] rgcbReservation

LONGLONG 型変数の配列へのポインター。 呼び出し元は、配列の各要素を、スペースを確保する必要があるレコードのサイズ (バイト単位) に設定します。 返された場合、各配列要素は、レコード用に予約されている領域の実際のサイズを受け取ります。 これには、ヘッダーと配置に必要な領域が含まれます。 予約値が負の場合、指定された負の値の絶対値とほぼ一致する予約レコードが解放されます。 cReserveRecords が 0 の場合、このパラメーターは NULL にすることができ、fFlags のCLFS_FLAG_USE_RESERVATION フラグが設定されている場合は NULL にする必要があります。

[in] fFlags

このパラメーターには、0 または次のフラグの任意の組み合わせを指定できます。

フラグ 説明
CLFS_FLAG_FORCE_APPEND 現在のレコードがログ I/O ブロックに追加されると、ブロックは LSN シーケンスで安定ストレージにキューに入れられます。 このフラグは、レコードが安定したストレージに強制される保証を提供しません (CLFS_FLAG_FORCE_FLUSHを参照)。
CLFS_FLAG_FORCE_FLUSH 現在のレコードがログ I/O ブロックに追加されると、ブロックは安定したストレージに強制されます。
CLFS_FLAG_USE_RESERVATION 現在のレコードは、マーシャリング領域内のログ I/O ブロック内の予約済みスペースに配置されます。 マーシャリング領域の予約済みレコードの数が 1 ずつ減らされます。 このフラグが設定されている場合、 cReserveRecords は 0 で、 rgcbReservationNULL である必要があります。

[out, optional] plsn

追加されたレコードの LSN を受け取る CLFS_LSN 構造体へのポインター。 cWriteEntries が 0 の場合、このパラメーターは NULL にすることができます。

戻り値

ClfsReserveAndAppendLog は 、成功した場合にSTATUS_SUCCESSを返します。それ以外の場合は、Ntstatus.h で定義されているエラー コードのいずれかを返します。

注釈

ClfsReserveAndAppendLog ルーチンは、省略可能なパラメーターの存在とCLFS_USE_RESERVATION フラグの状態に基づいて、その基本的な動作を変更します。 次の表は、一般的なシナリオをまとめたものです。

パラメーターとフラグの値 実行されたアクション
cWriteEntries = 0。

rgWriteEntries = NULL

plsn = NULL

一連のレコードの領域を予約しますが、マーシャリング領域にレコードを追加しません。 rgcbReservation パラメーターは、予約された領域を必要とする各レコードのデータ部分のサイズを指定します。
cWriteEntries > 0。

rgWriteEntriesNULL ではありません。

plsnNULL ではありません。

cReserveRecords = 0。

rgcbReservationNULL です

CLFS_USE_RESERVATIONが設定されています。

既に予約されている領域を使用して、マーシャリング領域にレコードを追加します。 予約済みレコード・スペースの数を 1 ずつ減らします。
cWriteEntries > 0。

rgWriteEntriesNULL ではありません。

plsnNULL ではありません。

cReserveRecords = 0。

rgcbReservationNULL です

CLFS_USE_RESERVATIONはクリアされます。

新しいスペースを予約して、マーシャリング領域にレコードを追加します。 予約済みレコード・スペースの数は変更しません。
cWriteEntries > 0。

rgWriteEntriesNULL ではありません。

plsnNULL ではありません。

cReserveRecords> 0.

rgcbReservation が NULL ではありません。

CLFS_USE_RESERVATION フラグがクリアされます。

新しいスペースを予約して、マーシャリング領域にレコードを追加します。 また、現時点では追加されていないレコードのセットの領域も予約します。 rgcbReservation パラメーターは、予約済みの領域を必要とする各レコードのサイズを指定します。 予約レコードスペースの数を cReserveRecords の値だけ増やします。
 

ClfsReserveAndAppendLog の呼び出しは、cbEntryAlignment パラメーターを 1 に設定して ClfsReserveAndAppendLogAligned を呼び出すことと同じです。

CLFS の概念と用語の詳細については、「 共通ログ ファイル システム」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Server 2003 R2、Windows Vista、およびそれ以降のバージョンの Windows で使用できます。
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h を含む)
Library Clfs.lib
[DLL] Clfs.sys
IRQL <= APC_LEVEL

こちらもご覧ください

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLogAligned