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 |