ClfsReserveAndAppendLogAligned-Funktion (wdm.h)
Die ClfsReserveAndAppendLogAligned-Routine reserviert Speicherplatz in einem Marshallbereich oder fügt einen Datensatz an einen Marshallingbereich an oder führt beides atomar aus. Die Daten des Datensatzes werden an den angegebenen Grenzen ausgerichtet.
Syntax
CLFSUSER_API NTSTATUS ClfsReserveAndAppendLogAligned(
[in] PVOID pvMarshalContext,
[in, optional] PCLFS_WRITE_ENTRY rgWriteEntries,
[in] ULONG cWriteEntries,
[in] ULONG cbEntryAlignment,
[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 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] cbEntryAlignment
Die Byteausrichtung der Dateneinträge, auf die rgWriteEntries verweist, wenn sie in einen einzelnen Datensatz gemarshallt werden. Ein Wert von 1 gibt eine einfache Verkettung an (siehe ClfsReserveAndAppendLog). Ein Wert, der größer als ein Wert ist, kann dazu führen, dass Nullen zwischen Einträgen im Datensatz platziert werden. Der Wert dieses Parameters muss größer als 0 sein.
[in, optional] plsnUndoNext
Ein Zeiger auf eine CLFS_LSN-Struktur , die die rückgängig-nächste LSN des anzufügenden Datensatzes bereitstellt.
[in, optional] plsnPrevious
Ein Zeiger auf eine CLFS_LSN-Struktur, die die vorherige LSN des anzufügenden Datensatzes bereitstellt.
[in] cReserveRecords
Die Anzahl der Elemente im Array, auf die rgcbReservation verweist. 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 (in Byte) eines Datensatzes fest, der über eine Speicherplatzreserve verfügen 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, der am ehesten mit dem absoluten Wert des angegebenen negativen Werts übereinstimmt, freigegeben. 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 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 stabile Speicherwarteschlange eingereiht. Dieses Flag bietet keine Garantie dafür, dass der Datensatz in einen 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 in einen stabilen Speicher gezwungen. |
CLFS_FLAG_USE_RESERVATION | Der aktuelle Datensatz wird in einem E/A-Block im reservierten Bereich platziert. Die Anzahl der reservierten Datensätze im Marshallingbereich wird um 1 reduziert. Wenn dieses Flag festgelegt ist, muss cReserveRecords null und rgcbReservationnull sein. |
[out, optional] plsn
Ein Zeiger auf eine CLFS_LSN-Struktur , die die LSN des angefügten Datensatzes empfängt. Dieser Parameter kann NULL sein, wenn cWriteEntries null ist.
Rückgabewert
ClfsReserveAndAppendLogAligned gibt bei Erfolg STATUS_SUCCESS zurück. Andernfalls wird einer der in "Ntstatus.h" definierten Fehlercodes zurückgegeben.
Hinweise
Die ClfsReserveAndAppendLogAligned-Routine ändert ihr grundlegendes Verhalten basierend auf dem Vorhandensein optionaler Parameter und dem Status des flags CLFS_USE_RESERVATION. 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 Marshallingbereich an. Der Parameter rgcbReservation 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 unter Verwendung von bereits reserviertem Speicherplatz an den Marshallingbereich an. 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 Marshallingbereich 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 Marshallingbereich 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. |
Eine Erläuterung der CLFS-Konzepte und -Terminologie finden Sie unter Common Log File System( Common Log File System).
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 (wdm.h einschließen) |
Bibliothek | Clfs.lib |
DLL | Clfs.sys |
IRQL | <= APC_LEVEL |