Freigeben über


ClfsReserveAndAppendLog-Funktion (wdm.h)

Die ClfsReserveAndAppendLog-Routine reserviert Speicherplatz in einem Marshallbereich oder fügt einen Datensatz an einen Marshallbereich an oder erledigt beides atomar.

Syntax

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

Ein Zeiger auf einen undurchsichtigen Kontext, der einen Marshallbereich darstellt, der einem CLFS-Stream zugeordnet ist. Der Aufrufer hat diesen Zeiger zuvor durch Aufrufen von ClfsCreateMarshallingArea abgerufen.

[in, optional] rgWriteEntries

Ein Zeiger auf ein Array von CLFS_WRITE_ENTRY Strukturen, von denen jede einen Zeiger auf einen Datenpuffer enthält, der Teil des Datensatzes wird, der an das Protokoll angefügt wird. Dieser Parameter kann NULL sein, wenn cWriteEntries null ist.

[in] cWriteEntries

Die Anzahl der Elemente im Array, auf die von rgWriteEntries verwiesen wird. Dieser Parameter muss null sein, wenn rgWriteEntriesNULL ist.

[in, optional] plsnUndoNext

Ein Zeiger auf eine CLFS_LSN-Struktur , die den nächsten LSN des anzufügenden Datensatzes bereitstellt.

[in, optional] plsnPrevious

Ein Zeiger auf eine CLFS_LSN-Struktur, die den vorherigen LSN des anzufügenden Datensatzes bereitstellt.

[in] cReserveRecords

Die Anzahl der Elemente im Array, auf die von rgcbReservation verwiesen wird. Dieser Parameter muss null sein, wenn rgcbReservationNULL ist oder das CLFS_FLAG_USE_RESERVATION-Flag von fFlags festgelegt ist.

[in, out] rgcbReservation

Ein Zeiger auf ein Array von LONGLONG-typisierten Variablen. Der Aufrufer legt jedes Element des Arrays auf die Größe eines Datensatzes in Bytes fest, für den Speicherplatz reserviert sein muss. Bei der Rückgabe erhält jedes Arrayelement die tatsächliche Größe des für den Datensatz reservierten Speicherplatzes. Dies schließt den für Header und Ausrichtung erforderlichen Speicherplatz ein. Wenn der Reservierungswert negativ ist, wird ein reservierter Datensatz freigegeben, der dem absoluten Wert des bereitgestellten negativen Werts am ehesten entspricht. Dieser Parameter kann NULL sein, wenn cReserveRecords null ist und NULL sein muss, wenn das CLFS_FLAG_USE_RESERVATION Flag von fFlags festgelegt ist.

[in] fFlags

Dieser Parameter kann null oder eine beliebige Kombination der folgenden Flags sein.

Flag Bedeutung
CLFS_FLAG_FORCE_APPEND Nachdem der aktuelle Datensatz an einen Protokoll-E/A-Block angefügt wurde, wird der Block in der LSN-Sequenz in eine Warteschlange für stabilen Speicher eingereiht. Dieses Flag bietet keine Garantie dafür, dass der Datensatz zum stabilen Speicher gezwungen wird (siehe CLFS_FLAG_FORCE_FLUSH).
CLFS_FLAG_FORCE_FLUSH Nachdem der aktuelle Datensatz an einen Protokoll-E/A-Block angefügt wurde, wird der Block zum stabilen Speicher gezwungen.
CLFS_FLAG_USE_RESERVATION Der aktuelle Datensatz wird im reservierten Bereich in einem Protokoll-E/A-Block innerhalb des Marshallbereichs platziert. Die Anzahl der reservierten Datensätze im Marshallbereich wird um einen reduziert. Wenn dieses Flag festgelegt ist, muss cReserveRecords null und rgcbReservationNULL sein.

[out, optional] plsn

Ein Zeiger auf eine CLFS_LSN Struktur, die den LSN des angefügten Datensatzes empfängt. Dieser Parameter kann NULL sein, wenn cWriteEntries null ist.

Rückgabewert

ClfsReserveAndAppendLog gibt bei Erfolg STATUS_SUCCESS zurück. Andernfalls wird einer der in "Ntstatus.h" definierten Fehlercodes zurückgegeben.

Hinweise

Die ClfsReserveAndAppendLog-Routine ändert ihr grundlegendes Verhalten basierend auf optionalen Parametern und dem Status des CLFS_USE_RESERVATION Flags. In der folgenden Tabelle sind allgemeine Szenarien zusammengefasst.

Parameter- und Flagwerte Ausgeführte Aktionen
cWriteEntries = 0.

rgWriteEntries = NULL.

plsn = NULL.

Reserviert Speicherplatz für eine Reihe von Datensätzen, fügt die Datensätze jedoch nicht an den Marshallbereich an. Der rgcbReservation-Parameter gibt die Größe des Datenteils jedes Datensatzes an, für den reservierter Speicherplatz erforderlich ist.
cWriteEntries > 0.

rgWriteEntries ist nicht NULL.

plsn ist nicht NULL.

cReserveRecords = 0.

rgcbReservation ist NULL.

CLFS_USE_RESERVATION ist festgelegt.

Fügt einen Datensatz an den Marshallbereich an, indem bereits reservierter Speicherplatz verwendet wird. Reduziert die Anzahl der reservierten Datensatzplätze um einen.
cWriteEntries > 0.

rgWriteEntries ist nicht NULL.

plsn ist nicht NULL.

cReserveRecords = 0.

rgcbReservation ist NULL.

CLFS_USE_RESERVATION wird gelöscht.

Fügt einen Datensatz an den Marshallbereich an, indem neuer Speicherplatz reserviert wird. Die Anzahl der reservierten Datensatzplätze bleibt unverändert.
cWriteEntries > 0.

rgWriteEntries ist nicht NULL.

plsn ist nicht NULL.

cReserveRecords> 0.

rgcbReservation ist nicht NULL.

CLFS_USE_RESERVATION Flag ist deaktiviert.

Fügt einen Datensatz an den Marshallbereich an, indem neuer Speicherplatz reserviert wird. Reserviert außerdem Speicherplatz für eine Reihe von Datensätzen, die zu diesem Zeitpunkt nicht angefügt werden. Der Parameter rgcbReservation gibt die Größe jedes Datensatzes an, für den reservierter Speicherplatz erforderlich ist. Erhöht die Anzahl der reservierten Datensatzplätze um den Wert von cReserveRecords.
 

Das Aufrufen von ClfsReserveAndAppendLog entspricht dem Aufrufen von ClfsReserveAndAppendLogAligned , wobei der cbEntryAlignment-Parameter auf eins festgelegt ist.

Eine Erläuterung der CLFS-Konzepte und -Terminologie finden Sie unter Allgemeines Protokolldateisystem.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Server 2003 R2, Windows Vista und höheren Versionen von Windows.
Zielplattform Desktop
Kopfzeile wdm.h (einschließen von Wdm.h)
Bibliothek Clfs.lib
DLL Clfs.sys
IRQL <= APC_LEVEL

Weitere Informationen

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLogAligned