共用方式為


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

[in] cWriteEntries

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

[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

傳回值

ClfsReserveAndAppendLog 會在成功時傳回STATUS_SUCCESS;否則,它會傳回 Ntstatus.h 中定義的其中一個錯誤碼。

備註

ClfsReserveAndAppendLog 例程會根據選擇性參數和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 的值
 

呼叫 ClfsReserveAndAppendLog 相當於呼叫 ClfsReserveAndAppendLogAligned ,並將 cbEntryAlignment 參數設定為一。

如需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

ClfsReserveAndAppendLogAligned