Fonction ReserveAndAppendLog (clfsw32.h)

Réserve de l’espace pour les mémoires tampons de journal ou ajoute un enregistrement de journal au journal, ou effectue les deux. La fonction est atomique.

Syntaxe

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

Paramètres

[in] pvMarshal

Pointeur vers un contexte de marshaling alloué à l’aide de la fonction CreateLogMarshallingArea .

[in, optional] rgWriteEntries

Pointeur vers un tableau de mémoires tampons CLFS_WRITE_ENTRY à marshaler en un seul enregistrement.

Ce paramètre est ignoré si le paramètre cWriteEntries est égal à zéro.

[in] cWriteEntries

Nombre d’entrées d’écriture dans le tableau rgWriteEntries .

Si cette valeur est différente de zéro, vous devez spécifier une mémoire tampon dans le paramètre rgWriteEntries .

[in, optional] plsnUndoNext

Pointeur vers une structure de CLFS_LSN qui spécifie le numéro de séquence de journal (LSN) de l’enregistrement suivant dans la chaîne d’annulation.

[in, optional] plsnPrevious

Pointeur vers une structure de CLFS_LSN qui spécifie le LSN de l’enregistrement précédent dans la chaîne précédente.

[in] cReserveRecords

Nombre de tailles d’enregistrement dans le tableau rgcbReservation .

[in, out, optional] rgcbReservation

Pointeur vers un tableau de tailles de réservation pour chaque enregistrement spécifié par le paramètre cReserveRecords .

Ce paramètre est ignoré si le paramètre cReserveRecords est égal à zéro. Si une taille de réservation est négative, une réservation de cette taille est libérée.

L’espace réel réservé à chaque enregistrement, y compris la surcharge requise, est retourné dans les éléments de tableau individuels en cas d’achèvement réussi. Ces valeurs peuvent être passées à la fonction FreeReservedLog pour ajuster l’espace réservé dans la zone de marshaling.

[in] fFlags

Indicateurs qui spécifient le comportement de cette fonction.

Une ou plusieurs des valeurs suivantes peuvent être combinées.

Valeur Signification
CLFS_FLAG_FORCE_APPEND
Affecte un emplacement physique pour tous les enregistrements ajoutés dans un journal qui n’ont pas été précédemment affectés à un emplacement physique.

Tous ces enregistrements sont disponibles pour la lecture à partir d’autres contextes de marshaling.

CLFS_FLAG_FORCE_FLUSH
Affecte un emplacement physique pour tous les enregistrements ajoutés dans un journal qui n’ont pas été précédemment affectés à un emplacement physique.

Tous ces enregistrements sont disponibles pour la lecture à partir d’autres contextes de marshaling. Ensuite, les enregistrements sont vidés sur le disque.

CLFS_FLAG_NO_FLAGS
N’affecte aucun indicateur.
CLFS_FLAG_USE_RESERVATION
Ajoute l’enregistrement actif à l’aide de l’espace réservé dans la zone de marshaling.

[out, optional] plsn

Pointeur vers une structure CLFS_LSN qui reçoit le LSN de l’enregistrement ajouté.

[in, out, optional] pOverlapped

Pointeur vers une structure OVERLAPPED.

Ce paramètre peut avoir la valeur NULL si l’opération asynchrone n’est pas utilisée.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez la fonction GetLastError.

La liste suivante identifie les codes d’erreur possibles :

Remarques

Le LSN retourné par la fonction ReserveAndAppendLog n’est pas nécessairement le LSN suivant utilisé. Le LSN retourné est une estimation du LSN suivant, et il varie en fonction des indicateurs spécifiés par le paramètre fFlags . Le LSN retourné peut être utilisé lors du déplacement de la queue de base. Ce LSN est invalidé par l’appel suivant à cette fonction.

Si la fonction ReserveAndAppendLog retourne ERROR_LOG_FILE_FULL, il n’y a plus d’espace dans le journal. Cela peut être résolu de l’une des manières suivantes :

  • Libérez toutes les réservations inutiles.
  • Avancez le LSN de base ou la queue de l’archive de journal, ou les deux, pour recycler les conteneurs.
  • Ajoutez des conteneurs au journal.
L’API gestion CLFS permet également de gérer des scénarios impliquant des journaux complets.

Si la fonction ReserveAndAppendLog est appelée avec une structure pOverlapped valide et si le handle de journal est créé avec l’option qui se chevauche, si un appel à cette fonction échoue avec un code d’erreur de ERROR_IO_PENDING, un pointeur vers un contexte de lecture valide est placé dans la variable vers laquelle pointe le paramètre ppvReadContext .

Pour terminer la copie de l’enregistrement de journal, le client doit d’abord synchroniser son exécution avec l’achèvement différé de l’opération d’E/S qui se chevauche à l’aide de la fonction GetOverlappedResult ou de l’une des fonctions d’attente de synchronisation. Pour plus d’informations, consultez Synchronisation et entrées et sorties qui se chevauchent.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête clfsw32.h
Bibliothèque Clfsw32.lib
DLL Clfsw32.dll

Voir aussi

CLFS_LSN

CLFS_WRITE_ENTRY

Fonctions courantes du système de fichiers journaux

OVERLAPPED