Fungsi ClfsReserveAndAppendLog (wdm.h)

Rutinitas ClfsReserveAndAppendLog mencadangkan ruang di area marsekal atau menambahkan catatan ke area marsekal atau melakukan keduanya secara atomik.

Sintaks

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
);

Parameter

[in] pvMarshalContext

Penunjuk ke konteks buram yang mewakili area marshalling yang terkait dengan aliran CLFS. Penelepon sebelumnya mendapatkan pointer ini dengan memanggil ClfsCreateMarshallingArea.

[in, optional] rgWriteEntries

Penunjuk ke array struktur CLFS_WRITE_ENTRY , yang masing-masing memegang penunjuk ke buffer data yang akan menjadi bagian dari rekaman yang ditambahkan ke log. Parameter ini dapat berupa NULL jika cWriteEntries adalah nol.

[in] cWriteEntries

Jumlah elemen dalam array yang diarahkan oleh rgWriteEntries. Parameter ini harus nol jika rgWriteEntries adalah NULL.

[in, optional] plsnUndoNext

Penunjuk ke struktur CLFS_LSN yang memasok LSN rekaman berikutnya yang akan ditambahkan.

[in, optional] plsnPrevious

Penunjuk ke struktur CLFS_LSN yang memasok LSN sebelumnya dari rekaman yang akan ditambahkan.

[in] cReserveRecords

Jumlah elemen dalam array yang ditunjukkan oleh rgcbReservation. Parameter ini harus nol jika rgcbReservation adalah NULL atau bendera CLFS_FLAG_USE_RESERVATION fFlags diatur.

[in, out] rgcbReservation

Penunjuk ke array variabel berjenis LONGLONG. Penelepon mengatur setiap elemen array ke ukuran, dalam byte, dari rekaman yang harus memiliki ruang yang disediakan untuknya. Saat dikembalikan, setiap elemen array menerima ukuran aktual ruang yang dicadangkan untuk rekaman. Ini termasuk ruang yang diperlukan untuk header dan perataan. Jika nilai reservasi negatif, catatan yang dipesan yang paling hampir cocok dengan nilai absolut dari nilai negatif yang disediakan akan dibebaskan. Parameter ini dapat berupa NULL jika cReserveRecords adalah nol dan harus NULL jika bendera CLFS_FLAG_USE_RESERVATION fFlags diatur.

[in] fFlags

Parameter ini dapat berupa nol atau kombinasi apa pun dari bendera berikut.

Bendera Makna
CLFS_FLAG_FORCE_APPEND Setelah rekaman saat ini ditambahkan ke blok I/O log, blok diantrekan, dalam urutan LSN, ke penyimpanan yang stabil. Bendera ini tidak memberikan jaminan bahwa rekaman dipaksa untuk penyimpanan stabil (lihat CLFS_FLAG_FORCE_FLUSH).
CLFS_FLAG_FORCE_FLUSH Setelah rekaman saat ini ditambahkan ke blok I/O log, blok dipaksa untuk penyimpanan stabil.
CLFS_FLAG_USE_RESERVATION Rekaman saat ini ditempatkan di ruang yang dipesan dalam blok I/O log di dalam area marshalling. Jumlah catatan yang dipesan di area marshalling berkurang satu. Jika bendera ini diatur, cReserveRecords harus nol dan rgcbReservation harus NULL.

[out, optional] plsn

Penunjuk ke struktur CLFS_LSN yang menerima LSN dari rekaman yang ditambahkan. Parameter ini dapat berupa NULL jika cWriteEntries adalah nol.

Nilai kembali

ClfsReserveAndAppendLog mengembalikan STATUS_SUCCESS jika berhasil; jika tidak, ia mengembalikan salah satu kode kesalahan yang ditentukan dalam Ntstatus.h.

Keterangan

Rutinitas ClfsReserveAndAppendLog mengubah perilaku mendasarnya berdasarkan adanya parameter opsional dan status bendera CLFS_USE_RESERVATION. Tabel berikut ini meringkas skenario umum.

Nilai parameter dan bendera Tindakan yang dilakukan
cWriteEntries = 0.

rgWriteEntries = NULL.

plsn = NULL.

Mencadangkan ruang untuk sekumpulan rekaman, tetapi tidak menambahkan rekaman ke area marshalling. Parameter rgcbReservation memberikan ukuran bagian data dari setiap rekaman yang membutuhkan ruang yang dicadangkan.
cWriteEntries > 0.

rgWriteEntries bukan NULL.

plsn bukan NULL.

cReserveRecords = 0.

rgcbReservation adalah NULL.

CLFS_USE_RESERVATION diatur.

Menambahkan catatan ke area marshalling dengan menggunakan ruang yang telah dipesan. Mengurangi jumlah ruang rekaman yang dipesan satu per satu.
cWriteEntries > 0.

rgWriteEntries bukan NULL.

plsn bukan NULL.

cReserveRecords = 0.

rgcbReservation adalah NULL.

CLFS_USE_RESERVATION dibersihkan.

Menambahkan catatan ke area marshalling dengan mencairkan ruang baru. Membiarkan jumlah ruang rekaman yang dipesan tidak berubah.
cWriteEntries > 0.

rgWriteEntries bukan NULL.

plsn bukan NULL.

cReserveRecords> 0.

rgcbReservation bukan NULL.

bendera CLFS_USE_RESERVATION dibersihkan.

Menambahkan catatan ke area marshalling dengan mencairkan ruang baru. Juga mencadangkan ruang untuk sekumpulan rekaman yang tidak ditambahkan saat ini. Parameter rgcbReservation memberikan ukuran setiap rekaman yang membutuhkan ruang yang dicadangkan. Meningkatkan jumlah ruang rekaman yang dipesan berdasarkan nilai cReserveRecords.
 

Memanggil ClfsReserveAndAppendLog setara dengan memanggil ClfsReserveAndAppendLogAligned dengan parameter cbEntryAlignment diatur ke satu.

Untuk penjelasan tentang konsep dan terminologi CLFS, lihat Sistem File Log Umum.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows Server 2003 R2, Windows Vista, dan versi Windows yang lebih baru.
Target Platform Desktop
Header wdm.h (termasuk Wdm.h)
Pustaka Clfs.lib
DLL Clfs.sys
IRQL <= APC_LEVEL

Lihat juga

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLogAligned