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 所指向之陣列中的項目數目。 如果 rgWriteEntries 為 NULL,此參數必須為零。
[in, optional] plsnUndoNext
CLFS_LSN 結構的指標,提供要附加之記錄的復原下一個 LSN。
[in, optional] plsnPrevious
CLFS_LSN 結構的指標,提供要附加之記錄的先前 LSN。
[in] cReserveRecords
rgcbReservation 所指向之陣列中的項目數目。 如果 rgcbReservation 為 NULL 或已設定 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。 rgcbReservation 為 NULL。 已設定CLFS_USE_RESERVATION。 |
使用已保留的空間,將記錄附加至封送處理區域。 將保留的記錄空間數目減少一。 |
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 相當於呼叫 ClfsReserveAndAppendLogAligned ,並將 cbEntryAlignment 參數設定為一。
如需CLFS概念和術語的說明,請參閱 一般記錄檔系統。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用於 Windows Server 2003 R2、Windows Vista 和更新版本的 Windows。 |
目標平台 | 桌面 |
標頭 | wdm.h (包含 Wdm.h) |
程式庫 | Clfs.lib |
Dll | Clfs.sys |
IRQL | <= APC_LEVEL |