Freigeben über


ReserveAndAppendLog-Funktion (clfsw32.h)

Reserviert Speicherplatz für Protokollpuffer oder fügt einen Protokolldatensatz an das Protokoll an, oder tut beides. Die Funktion ist atomar.

Syntax

CLFSUSER_API BOOL ReserveAndAppendLog(
  [in]                PVOID             pvMarshal,
  [in, optional]      PCLFS_WRITE_ENTRY rgWriteEntries,
  [in]                ULONG             cWriteEntries,
  [in, optional]      PCLFS_LSN         plsnUndoNext,
  [in, optional]      PCLFS_LSN         plsnPrevious,
  [in]                ULONG             cReserveRecords,
  [in, out, optional] LONGLONG []       rgcbReservation,
  [in]                ULONG             fFlags,
  [out, optional]     PCLFS_LSN         plsn,
  [in, out, optional] LPOVERLAPPED      pOverlapped
);

Parameter

[in] pvMarshal

Ein Zeiger auf einen Marshallkontext, der mithilfe der CreateLogMarshallingArea-Funktion zugeordnet wird.

[in, optional] rgWriteEntries

Ein Zeiger auf ein Array von CLFS_WRITE_ENTRY Puffern, die in einem Datensatz gemarst werden sollen.

Dieser Parameter wird ignoriert, wenn der Parameter cWriteEntries 0 ist.

[in] cWriteEntries

Die Anzahl der Schreibeinträge im rgWriteEntries-Array .

Wenn dieser Wert nichtzero ist, müssen Sie einen Puffer im Parameter rgWriteEntries angeben.

[in, optional] plsnUndoNext

Ein Zeiger auf eine CLFS_LSN-Struktur , die die Protokollsequenznummer (LSN) des nächsten Datensatzes in der Undo-Kette angibt.

[in, optional] plsnPrevious

Ein Zeiger auf eine CLFS_LSN-Struktur , die den LSN des vorherigen Datensatzes in der vorherigen Kette angibt.

[in] cReserveRecords

Die Anzahl der Datensatzgrößen im rgcbReservation-Array .

[in, out, optional] rgcbReservation

Ein Zeiger auf ein Array von Reservierungsgrößen für jeden Datensatz, den der Parameter cReserveRecords angibt.

Dieser Parameter wird ignoriert, wenn der cReserveRecords-Parameter 0 ist. Wenn eine Reservierungsgröße negativ ist, wird eine Reservierung dieser Größe freigegeben.

Der tatsächliche Speicherplatz, der für jeden Datensatz reserviert ist, einschließlich des erforderlichen Mehraufwands, wird bei erfolgreicher Fertigstellung in den einzelnen Arrayelementen zurückgegeben. Diese Werte können an die FreeReservedLog-Funktion übergeben werden, um den im Marshallbereich reservierten Speicherplatz anzupassen.

[in] fFlags

Die Flags, die das Verhalten dieser Funktion angeben.

Ein oder mehrere der folgenden Werte können kombiniert werden.

Wert Bedeutung
CLFS_FLAG_FORCE_APPEND
Weist allen angefügten Datensätzen in einem Protokoll, denen zuvor kein physischer Speicherort zugewiesen wurde, einen physischen Speicherort zu.

Alle diese Datensätze werden zum Lesen aus anderen Marshallkontexten zur Verfügung gestellt.

CLFS_FLAG_FORCE_FLUSH
Weist allen angefügten Datensätzen in einem Protokoll, denen zuvor kein physischer Speicherort zugewiesen wurde, einen physischen Speicherort zu.

Alle diese Datensätze werden zum Lesen aus anderen Marshallkontexten zur Verfügung gestellt. Anschließend werden die Datensätze auf den Datenträger geleert.

CLFS_FLAG_NO_FLAGS
Weist keine Flags zu.
CLFS_FLAG_USE_RESERVATION
Fügt den aktuellen Datensatz unter Verwendung des reservierten Speicherplatzes im Marshallbereich an.

[out, optional] plsn

Ein Zeiger auf eine CLFS_LSN Struktur, die den LSN des angefügten Datensatzes empfängt.

[in, out, optional] pOverlapped

Ein Zeiger auf eine Struktur OVERLAPPED.

Dieser Parameter kann NULL sein, wenn kein asynchroner Vorgang verwendet wird.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie die GetLastError-Funktion auf.

In der folgenden Liste werden die möglichen Fehlercodes identifiziert:

Hinweise

Der von der ReserveAndAppendLog-Funktion zurückgegebene LSN ist nicht unbedingt der nächste LSN, der verwendet wird. Der zurückgegebene LSN ist eine Schätzung des nächsten LSN und variiert je nachdem, welche Flags durch den fFlags-Parameter angegeben werden. Der zurückgegebene LSN kann beim Verschieben des Basisschwanzs verwendet werden. Dieser LSN wird durch den nächsten Aufruf dieser Funktion ungültig.

Wenn die ReserveAndAppendLog-FunktionERROR_LOG_FILE_FULL zurückgibt, ist im Protokoll kein Speicherplatz mehr vorhanden. Dies kann auf eine der folgenden Arten aufgelöst werden:

  • Kostenlos alle nicht benötigten Reservierungen.
  • Verschieben Sie den Basis-LSN oder den Protokollarchivschwund oder beides, um Container zu recyceln.
  • Fügen Sie dem Protokoll Container hinzu.
Die CLFS-Verwaltungs-API bietet auch eine Möglichkeit, Szenarien mit vollständigen Protokollen zu behandeln.

Wenn die ReserveAndAppendLog-Funktion mit einer gültigen pOverlapped-Struktur aufgerufen wird und das Protokollhandle mit der Option überlappend erstellt wird ERROR_IO_PENDING, wird ein Zeiger auf einen gültigen Lesekontext in der Variablen platziert, auf die der ppvReadContext-Parameter verweist.

Um die Protokolldatensatzkopie abzuschließen, sollte der Client zunächst seine Ausführung mit verzögertem Abschluss des überlappenden E/A-Vorgangs synchronisieren, indem er die GetOverlappedResult-Funktion oder eine der Synchronisierungswartefunktionen verwendet. Weitere Informationen finden Sie unter Synchronisierung und überlappende Eingabe und Ausgabe.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile clfsw32.h
Bibliothek Clfsw32.lib
DLL Clfsw32.dll

Weitere Informationen

CLFS_LSN

CLFS_WRITE_ENTRY

Allgemeine Protokolldateisystemfunktionen

OVERLAPPED