Función ClfsReserveAndAppendLog (wdm.h)

La rutina ClfsReserveAndAppendLog reserva espacio en un área de serialización o anexa un registro a un área de serialización o hace ambos de forma atómica.

Sintaxis

CLFSUSER_API NTSTATUS ClfsReserveAndAppendLog(
  [in]            PVOID             pvMarshalContext,
  [in, optional]  PCLFS_WRITE_ENTRY rgWriteEntries,
  [in]            ULONG             cWriteEntries,
  [in, optional]  PCLFS_LSN         plsnUndoNext,
  [in, optional]  PCLFS_LSN         plsnPrevious,
  [in]            ULONG             cReserveRecords,
  [in, out]       PLONGLONG         rgcbReservation,
  [in]            ULONG             fFlags,
  [out, optional] PCLFS_LSN         plsn
);

Parámetros

[in] pvMarshalContext

Puntero a un contexto opaco que representa un área de serialización asociada a una secuencia CLFS. El autor de la llamada obtuvo previamente este puntero llamando a ClfsCreateMarshallingArea.

[in, optional] rgWriteEntries

Puntero a una matriz de estructuras de CLFS_WRITE_ENTRY , cada una de las cuales contiene un puntero a un búfer de datos que se convertirá en parte del registro que se anexa al registro. Este parámetro puede ser NULL si cWriteEntries es cero.

[in] cWriteEntries

Número de elementos de la matriz a los que apunta rgWriteEntries. Este parámetro debe ser cero si rgWriteEntries es NULL.

[in, optional] plsnUndoNext

Puntero a una estructura CLFS_LSN que proporciona el LSN de deshacer siguiente del registro que se va a anexar.

[in, optional] plsnPrevious

Puntero a una estructura CLFS_LSN que proporciona el LSN anterior del registro que se va a anexar.

[in] cReserveRecords

Número de elementos de la matriz a los que apunta rgcbReservation. Este parámetro debe ser cero si rgcbReservation es NULL o se establece la marca CLFS_FLAG_USE_RESERVATION de fFlags .

[in, out] rgcbReservation

Puntero a una matriz de variables con tipo LONGLONG. El autor de la llamada establece cada elemento de la matriz en el tamaño, en bytes, de un registro que debe tener espacio reservado para ella. A cambio, cada elemento de matriz recibe ese tamaño real del espacio reservado para el registro. Esto incluye el espacio necesario para los encabezados y la alineación. Si el valor de la reserva es negativo, se liberará un registro reservado que casi coincida con el valor absoluto del valor negativo proporcionado. Este parámetro puede ser NULL si cReserveRecords es cero y debe ser NULL si se establece la marca CLFS_FLAG_USE_RESERVATION de fFlags .

[in] fFlags

Este parámetro puede ser cero o cualquier combinación de las marcas siguientes.

Marca Significado
CLFS_FLAG_FORCE_APPEND Después de anexar el registro actual a un bloque de E/S de registro, el bloque se pone en cola, en secuencia LSN, en un almacenamiento estable. Esta marca no proporciona ninguna garantía de que el registro se vea forzado a un almacenamiento estable (consulte CLFS_FLAG_FORCE_FLUSH).
CLFS_FLAG_FORCE_FLUSH Después de anexar el registro actual a un bloque de E/S de registro, el bloque se fuerza a un almacenamiento estable.
CLFS_FLAG_USE_RESERVATION El registro actual se coloca en un espacio reservado en un bloque de E/S de registro dentro del área de serialización. El número de registros reservados en el área de serialización se reduce en uno. Si se establece esta marca, cReserveRecords debe ser cero y rgcbReservation debe ser NULL.

[out, optional] plsn

Puntero a una estructura CLFS_LSN que recibe el LSN del registro anexado. Este parámetro puede ser NULL si cWriteEntries es cero.

Valor devuelto

ClfsReserveAndAppendLog devuelve STATUS_SUCCESS si se realiza correctamente; de lo contrario, devuelve uno de los códigos de error definidos en Ntstatus.h.

Comentarios

La rutina ClfsReserveAndAppendLog cambia su comportamiento fundamental en función de la presencia de parámetros opcionales y el estado de la marca CLFS_USE_RESERVATION. En la tabla siguiente se resumen los escenarios comunes.

Valores de parámetro y marca Acciones realizadas
cWriteEntries = 0.

rgWriteEntries = NULL.

plsn = NULL.

Reserva espacio para un conjunto de registros, pero no anexa los registros al área de serialización. El parámetro rgcbReservation proporciona el tamaño de la parte de datos de cada registro que necesita espacio reservado.
cWriteEntries > 0.

rgWriteEntries no es NULL.

plsn no es NULL.

cReserveRecords = 0.

rgcbReservation es NULL.

CLFS_USE_RESERVATION está establecido.

Anexa un registro al área de serialización mediante el espacio que ya se ha reservado. Reduce el número de espacios de registro reservados en uno.
cWriteEntries > 0.

rgWriteEntries no es NULL.

plsn no es NULL.

cReserveRecords = 0.

rgcbReservation es NULL.

CLFS_USE_RESERVATION se borra.

Anexa un registro al área de serialización reservando un nuevo espacio. Deja sin cambios el número de espacios de registro reservados.
cWriteEntries > 0.

rgWriteEntries no es NULL.

plsn no es NULL.

cReserveRecords> 0.

rgcbReservation no es NULL.

CLFS_USE_RESERVATION marca está desactivada.

Anexa un registro al área de serialización reservando un nuevo espacio. También reserva espacio para un conjunto de registros que no se anexan en este momento. El parámetro rgcbReservation proporciona el tamaño de cada registro que necesita espacio reservado. Aumenta el número de espacios de registro reservados por el valor de cReserveRecords.
 

Llamar a ClfsReserveAndAppendLog equivale a llamar a ClfsReserveAndAppendLogAligned con el parámetro cbEntryAlignment establecido en uno.

Para obtener una explicación de los conceptos y la terminología de CLFS, consulte Common Log File System.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Server 2003 R2, Windows Vista y versiones posteriores de Windows.
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h)
Library Clfs.lib
Archivo DLL Clfs.sys
IRQL <= APC_LEVEL

Consulte también

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLogAligned