Freigeben über


ClfsReserveAndAppendLog-Funktion (wdm.h)

Die ClfsReserveAndAppendLog Routine reserviert Platz in einem Marshalling-Gebiet oder fügt einen Datensatz an ein Marshall-Gebiet an oder führt beide atomisch aus.

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 Marshallingbereich darstellt, der einem CLFS-Stream zugeordnet ist. Der Aufrufer hat diesen Zeiger zuvor durch Aufrufen ClfsCreateMarshallingAreaabgerufen.

[in, optional] rgWriteEntries

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

[in] cWriteEntries

Die Anzahl der Elemente im Array, auf die durch rgWriteEntriesverwiesen wird. Dieser Parameter muss null sein, wenn rgWriteEntriesNULL-ist.

[in, optional] plsnUndoNext

Ein Zeiger auf eine CLFS_LSN Struktur, die den rückgängig-nächsten LSN des Datensatzes angibt, der angefügt werden soll.

[in, optional] plsnPrevious

Ein Zeiger auf eine CLFS_LSN Struktur, die den vorherigen LSN des Datensatzes angibt, der angefügt werden soll.

[in] cReserveRecords

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

[in, out] rgcbReservation

Ein Zeiger auf ein Array von LONGLONG-Typvariablen. Der Aufrufer legt jedes Element des Arrays auf die Größe eines Datensatzes in Byte fest, der speicherplatz reserviert sein muss. Bei Rückgabe empfängt jedes Arrayelement diese tatsächliche Größe des für den Datensatz reservierten Speicherplatzes. Dies schließt den erforderlichen Platz für Kopfzeilen und Ausrichtung ein. Wenn der Reservierungswert negativ ist, wird ein reservierter Datensatz, der fast dem absoluten Wert des bereitgestellten negativen Werts entspricht, freigegeben. Dieser Parameter kann NULL- werden, 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.

Flagge 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 die Warteschlange eingereiht, um den stabilen Speicher zu speichern. Dieses Kennzeichen garantiert nicht, dass der Datensatz zum stabilen Speicher gezwungen ist (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 Marshalling-Bereichs platziert. Die Anzahl der reservierten Datensätze im Marshallbereich wird um eins reduziert. Wenn dieses Flag festgelegt ist, muss cReserveRecords- null sein, und rgcbReservation- muss NULL-sein.

[out, optional] plsn

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

Rückgabewert

ClfsReserveAndAppendLog- gibt STATUS_SUCCESS zurück, wenn dies erfolgreich ist; andernfalls wird eine der fehlercodes zurückgegeben, die in Ntstatus.h definiert sind.

Bemerkungen

Das ClfsReserveAndAppendLog Routine ändert sein grundlegendes Verhalten basierend auf dem Vorhandensein optionaler Parameter und des Status des CLFS_USE_RESERVATION Flags. In der folgenden Tabelle sind allgemeine Szenarien zusammengefasst.

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

rgWriteEntries = NULL-.

plsn = NULL.

Reserviert Platz für eine Reihe von Datensätzen, fügt die Datensätze jedoch nicht an den Marshallingbereich an. Der rgcbReservation Parameter gibt die Größe des Datenteils jedes Datensatzes an, der reservierten Speicherplatz benötigt.
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 Marshalling-Bereich an, indem Leerzeichen verwendet werden, die bereits reserviert wurden. Reduziert die Anzahl der reservierten Datensatzplätze um eins.
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 er neuen Raum reserviert. Lässt die Anzahl der reservierten Datensatzplätze unverändert.
cWriteEntries > 0.

rgWriteEntries ist nicht NULL-.

plsn ist nicht NULL-.

cReserveRecords> 0.

rgcbReservation ist nicht NULL-.

CLFS_USE_RESERVATION Kennzeichnung wird gelöscht.

Fügt einen Datensatz an den Marshallbereich an, indem er neuen Raum reserviert. Reserviert auch Platz für eine Reihe von Datensätzen, die zurzeit nicht angefügt werden. Der rgcbReservation Parameter gibt die Größe jedes Datensatzes an, der reservierten Speicherplatz benötigt. Erhöht die Anzahl der reservierten Datensatzplätze um den Wert von cReserveRecords.
 

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

Eine Erläuterung der CLFS-Konzepte und -Terminologie finden Sie unter Common Log File System.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows Server 2003 R2, Windows Vista und höheren Versionen von Windows.
Zielplattform- Desktop
Header- wdm.h (include Wdm.h)
Library Clfs.lib
DLL- Clfs.sys
IRQL- <= APC_LEVEL

Siehe auch

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLogAligned