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 で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h を含む) |
Library | Clfs.lib |
[DLL] | Clfs.sys |
IRQL | <= APC_LEVEL |