Freigeben über


ReserveAndAppendLogAligned-Funktion (clfsw32.h)

Reserviert Speicherplatz für Protokollpuffer oder fügt einen Protokolldatensatz an das Protokoll an, oder beides. Diese Funktion ähnelt der ReserveAndAppendLog-Funktion , aber ReserveAndAppendLogAligned richtet die Schreibeinträge des Datensatzes an der angegebenen Byteausrichtung aus.

Syntax

CLFSUSER_API BOOL ReserveAndAppendLogAligned(
  [in]                PVOID             pvMarshal,
  [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, optional] LONGLONG []       rgcbReservation,
  [in]                ULONG             fFlags,
  [out, optional]     PCLFS_LSN         plsn,
  [in, out, optional] LPOVERLAPPED      pOverlapped
);

Parameter

[in] pvMarshal

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

[in, optional] rgWriteEntries

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

Dieser Parameter wird ignoriert, wenn der cWriteEntries-Parameter null ist.

[in] cWriteEntries

Die Anzahl der Schreibeinträge im rgWriteEntries-Array .

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

[in] cbEntryAlignment

Die Byteausrichtung für jeden Schreibeintrag im rgWriteEntries-Parameter .

Geben Sie 1 (1) für eine einfache Verkettung an. Der cbWriteEntryAlignment-Parameter muss ungleich null sein.

[in, optional] plsnUndoNext

Ein Zeiger auf eine CLFS_LSN-Struktur , die die Protokollsequenznummer (Log Sequence Number, LSN) des nächsten Datensatzes in der Rückgängig-Kette angibt.

[in, optional] plsnPrevious

Ein Zeiger auf eine CLFS_LSN-Struktur , die die 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 null 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 Marshallingbereich 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 einen physischen Speicherort für alle angefügten Datensätze im Protokoll zu, denen zuvor kein physischer Speicherort zugewiesen wurde.

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

CLFS_FLAG_FORCE_FLUSH
Weist einen physischen Speicherort für alle angefügten Datensätze im Protokoll zu, denen zuvor kein physischer Speicherort zugewiesen wurde.

Alle diese Datensätze werden zum Lesen aus anderen Marshallingkontexten 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 mithilfe des reservierten Speicherplatzes im Marshallingbereich an.

[out, optional] plsn

Ein Zeiger auf eine CLFS_LSN-Struktur , die die 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. Die folgende Liste identifiziert die möglichen Fehlercodes:

Hinweise

Die LSN, die von der ReserveAndAppendLogAligned-Funktion zurückgegeben wird, ist nicht unbedingt die nächste LSN, die verwendet wird. Die zurückgegebene LSN ist eine Schätzung der nächsten LSN und variiert je nachdem, welche Flags vom fFlags-Parameter angegeben werden. Die zurückgegebene LSN kann beim Verschieben des Basisendes verwendet werden. Diese LSN wird durch den nächsten Aufruf dieser Funktion ungültig.

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

  • Geben Sie alle nicht benötigten Reservierungen frei.
  • Verschieben Sie die Basis-LSN oder das Protokollarchivfragment 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 verarbeiten.

Wenn die ReserveAndAppendLogAligned-Funktion mit einer gültigen überlappenden Struktur aufgerufen wird und das Protokollhandle mit der Option überlappend erstellt wird, schlägt ein Aufruf dieser Funktion mit dem Fehlercode ERROR_IO_PENDING fehl, 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 dem verzögerten Abschluss des überlappenden E/A-Vorgangs mithilfe der GetOverlappedResult-Funktion oder einer der Synchronisierungswartefunktionen synchronisieren. Weitere Informationen finden Sie unter Synchronisierung und überlappende Eingabe und Ausgabe.

Anforderungen

   
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 Protokolldateifunktionen

OVERLAPPED