Funzione ReserveAndAppendLog (clfsw32.h)

Riserva spazio per i buffer di log o aggiunge un record di log al log oppure esegue entrambi. La funzione è atomica.

Sintassi

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
);

Parametri

[in] pvMarshal

Puntatore a un contesto di marshalling allocato usando la funzione CreateLogMarshallingArea .

[in, optional] rgWriteEntries

Puntatore a una matrice di buffer CLFS_WRITE_ENTRY da eseguire il marshalling in un record.

Questo parametro viene ignorato se il parametro cWriteEntries è zero.

[in] cWriteEntries

Numero di voci di scrittura nella matrice rgWriteEntries .

Se questo valore è diverso da zero, è necessario specificare un buffer nel parametro rgWriteEntries .

[in, optional] plsnUndoNext

Puntatore a una struttura CLFS_LSN che specifica il numero di sequenza di log (LSN) del record successivo nella catena di annullamento.

[in, optional] plsnPrevious

Puntatore a una struttura CLFS_LSN che specifica l'LSN del record precedente nella catena precedente.

[in] cReserveRecords

Numero di dimensioni dei record nella matrice rgcbReservation .

[in, out, optional] rgcbReservation

Puntatore a una matrice di dimensioni della prenotazione per ogni record specificato dal parametro cReserveRecords .

Questo parametro viene ignorato se il parametro cReserveRecords è zero. Se una dimensione della prenotazione è negativa, viene rilasciata una prenotazione di tale dimensione.

Lo spazio effettivo riservato per ogni record, incluso il sovraccarico richiesto, viene restituito nei singoli elementi della matrice al completamento corretto. Questi valori possono essere passati alla funzione FreeReservedLog per regolare lo spazio riservato nell'area di marshalling.

[in] fFlags

Flag che specificano il comportamento di questa funzione.

È possibile combinare uno o più dei valori seguenti.

Valore Significato
CLFS_FLAG_FORCE_APPEND
Assegna una posizione fisica per tutti i record accodati in un log che non è stato assegnato in precedenza a una posizione fisica.

Tutti questi record sono resi disponibili per la lettura da altri contesti di marshalling.

CLFS_FLAG_FORCE_FLUSH
Assegna una posizione fisica per tutti i record accodati in un log che non è stato assegnato in precedenza a una posizione fisica.

Tutti questi record sono resi disponibili per la lettura da altri contesti di marshalling. I record vengono quindi scaricati su disco.

CLFS_FLAG_NO_FLAGS
Assegna nessun flag.
CLFS_FLAG_USE_RESERVATION
Aggiunge il record corrente usando lo spazio riservato nell'area di marshalling.

[out, optional] plsn

Puntatore a una struttura CLFS_LSN che riceve l'LSN del record aggiunto.

[in, out, optional] pOverlapped

Puntatore a una struttura OVERLAPPED .

Questo parametro può essere NULL se l'operazione asincrona non viene usata.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per ottenere informazioni sull'errore estese, chiamare la funzione GetLastError .

L'elenco seguente identifica i possibili codici di errore:

Commenti

LSN restituito dalla funzione ReserveAndAppendLog non è necessariamente l'LSN successivo usato. LSN restituito è una stima dell'LSN successiva e varia in base ai flag specificati dal parametro fFlags . LSN restituito può essere usato quando si sposta la coda di base. Questa LSN non è valida dalla chiamata successiva a questa funzione.

Se la funzione ReserveAndAppendLog restituisce ERROR_LOG_FILE_FULL, non esiste più spazio nel log. Questo può essere risolto in uno dei modi seguenti:

  • Liberare tutte le prenotazioni non autorizzate.
  • Avanzare l'LSN di base o la coda di archiviazione del log o entrambi per riciclare i contenitori.
  • Aggiungere contenitori al log.
L'API di gestione CLFS offre anche un modo per gestire gli scenari che coinvolgono i log completi.

Se la funzione ReserveAndAppendLog viene chiamata con una struttura pOverlapped valida e l'handle di log viene creato con l'opzione sovrapposta, se una chiamata a questa funzione non riesce con un codice di errore di ERROR_IO_PENDING, un puntatore a un contesto di lettura valido viene inserito nella variabile a cui punta il parametro ppvReadContext .

Per completare la copia del record di log, il client deve prima sincronizzarne l'esecuzione con il completamento posticipato dell'operazione di I/O sovrapposta usando la funzione GetOverlappedResult o una delle funzioni di attesa di sincronizzazione. Per altre informazioni, vedere Sincronizzazione e output sovrapposti.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2003 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione clfsw32.h
Libreria Clfsw32.lib
DLL Clfsw32.dll

Vedi anche

CLFS_LSN

CLFS_WRITE_ENTRY

Funzioni comuni del file system di log

SOVRAPPOSTA