共用方式為


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 為零,這個參數可以是 NULL

[in] cWriteEntries

rgWriteEntries 所指向之陣列中的項目數目。 如果 rgWriteEntriesNULL,此參數必須為零。

[in] cbEntryAlignment

rgWriteEntries 所指向之數據項的位元組對齊方式,因為它們會封送處理成單一記錄。 一個值指定簡單的串連 (請參閱 ClfsReserveAndAppendLog) 。 大於一的值可能會導致在記錄中的項目之間放置零。 此參數的值必須大於零。

[in, optional] plsnUndoNext

CLFS_LSN 結構的指標,提供要附加之記錄的復原下一個 LSN。

[in, optional] plsnPrevious

CLFS_LSN 結構的指標,提供要附加之記錄的先前 LSN。

[in] cReserveRecords

rgcbReservation 所指向之陣列中的項目數目。 如果 rgcbReservationNULL 或已設定 fFlags 的CLFS_FLAG_USE_RESERVATION旗標,則此參數必須為零。

[in, out] rgcbReservation

LONGLONG 型別變數陣列的指標。 呼叫端會將陣列的每個元素設定為必須保留空間的記錄大小,以位元組為單位。 傳回時,每個陣列元素都會接收保留給記錄之空間的實際大小。 這包括標頭和對齊所需的空間。 如果保留值為負數,則會釋放最符合所提供負值絕對值的保留記錄。 如果 cReserveRecords 為零,這個參數可以是 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 區塊的保留空間中。 封送處理區域中的保留記錄數目會減少一。 如果設定此旗標, cReserveRecords 必須為零,且 rgcbReservation 必須為 NULL

[out, optional] plsn

接收附加記錄之 LSN 之CLFS_LSN 結構的指標。 如果 cWriteEntries 為零,這個參數可以是 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。

rgcbReservationNULL

已設定CLFS_USE_RESERVATION。

使用已保留的空間,將記錄附加至封送處理區域。 將保留的記錄空間數目減少一。
cWriteEntries > 0。

rgWriteEntries 不是 NULL

plsn 不是 NULL

cReserveRecords = 0。

rgcbReservationNULL

已清除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。
目標平台 桌面
標頭 wdm.h (包含 Wdm.h)
程式庫 Clfs.lib
Dll Clfs.sys
IRQL <= APC_LEVEL

另請參閱

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLog