次の方法で共有


ClfsReserveAndAppendLogAligned 関数 (wdm.h)

ClfsReserveAndAppendLogAligned ルーチンは、マーシャリング領域内の領域を予約するか、マーシャリング領域にレコードを追加するか、両方をアトミックに行います。 レコードのデータは、指定した境界に合わせて配置されます。

構文

CLFSUSER_API NTSTATUS ClfsReserveAndAppendLogAligned(
  [in]            PVOID             pvMarshalContext,
  [in, optional]  PCLFS_WRITE_ENTRY rgWriteEntries,
  [in]            ULONG             cWriteEntries,
  [in]            ULONG             cbEntryAlignment,
  [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] cbEntryAlignment

rgWriteEntries が指すデータ エントリを 1 つのレコードにマーシャリングするときのバイトアラインメント。 値 1 は単純連結を指定します ( 「ClfsReserveAndAppendLog」を参照)。 1 より大きい値を指定すると、レコード内のエントリ間に 0 が配置される可能性があります。 このパラメーターの値は 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

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

フラグ 説明
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 にすることができます

戻り値

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

注釈

ClfsReserveAndAppendLogAligned ルーチンは、省略可能なパラメーターの存在と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.

rgcbReservationNULL ではありません。

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

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

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

ClfsReserveAndAppendLog