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 |