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 が指す配列内の要素の数。 rgWriteEntries が NULL の場合、このパラメーターは 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 が指す配列内の要素の数。 rgcbReservation が NULL であるか、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。
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 の値だけ増やします。 |
CLFS の概念と用語の説明については、「 共通ログ ファイル システム」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Server 2003 R2、Windows Vista、およびそれ以降のバージョンの Windows で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h を含む) |
Library | Clfs.lib |
[DLL] | Clfs.sys |
IRQL | <= APC_LEVEL |