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.
[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.
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 |