次の方法で共有


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 指す配列内の要素の数。 rgWriteEntries NULL 場合、このパラメーターは 0 にする必要があります。

[in, optional] plsnUndoNext

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

[in, optional] plsnPrevious

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

[in] cReserveRecords

rgcbReservation 指す配列内の要素の数。 rgcbReservation が NULL 場合、または 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 で、rgcbReservation NULL する必要があります。

[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 を します。

rgWriteEntries が NULL

plsn が NULL

cReserveRecords = 0 です。

rgcbReservation NULL

CLFS_USE_RESERVATIONが設定されています。

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

rgWriteEntries が NULL

plsn が NULL

cReserveRecords = 0 です。

rgcbReservation NULL

CLFS_USE_RESERVATIONはクリアされます。

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

rgWriteEntries が NULL

plsn が NULL

cReserveRecords > 0 をします。

rgcbReservation が NULL されていません。

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

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

clfsReserveAndAppendLog 呼び出すことは、cbEntryAlignment パラメーター 1 に設定された ClfsReserveAndAppendLogAligned を呼び出すことと同じです。

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

必要条件

要件 価値
サポートされる最小クライアント Windows Server 2003 R2、Windows Vista、およびそれ以降のバージョンの Windows で使用できます。
ターゲット プラットフォーム デスクトップ
ヘッダー wdm.h (Wdm.h を含む)
ライブラリ Clfs.lib
DLL Clfs.sys
IRQL <= APC_LEVEL

関連項目

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLogAligned