Función ReadLogRecord (clfsw32.h)
Inicia una secuencia de lecturas de un número de secuencia de registro (LSN) especificado en uno de tres modos y devuelve el primero de los registros especificados y un contexto de lectura. Un cliente puede leer los registros posteriores en el modo designado pasando el contexto de lectura a ReadNextLogRecord.
Sintaxis
CLFSUSER_API BOOL ReadLogRecord(
[in] PVOID pvMarshal,
[in] PCLFS_LSN plsnFirst,
[in] CLFS_CONTEXT_MODE eContextMode,
[out] PVOID *ppvReadBuffer,
[out] PULONG pcbReadBuffer,
[out] PCLFS_RECORD_TYPE peRecordType,
[out] PCLFS_LSN plsnUndoNext,
[out] PCLFS_LSN plsnPrevious,
[out] PVOID *ppvReadContext,
[in, out, optional] LPOVERLAPPED pOverlapped
);
Parámetros
[in] pvMarshal
Puntero a un contexto de serialización asignado mediante la función CreateLogMarshallingArea .
[in] plsnFirst
Puntero a una estructura de CLFS_LSN que especifica el número de secuencia de registro (LSN) del registro donde se debe iniciar la operación de lectura.
Este valor debe ser un LSN de un registro válido en el intervalo activo del registro.
[in] eContextMode
Modo del contexto de lectura que se devuelve en *ppvReadContext.
En la tabla siguiente se identifican los tres modos de lectura mutuamente excluyentes.
[out] ppvReadBuffer
Puntero a una variable que recibe un puntero al registro de destino en el bloque de E/S de registro.
[out] pcbReadBuffer
Puntero a una variable que recibe el tamaño de los datos que se devuelven en *ppvReadBuffer, en bytes.
[out] peRecordType
Puntero a una variable que recibe el tipo de registro leído.
Este parámetro es una de las CLFS_RECORD_TYPE Constantes.
[out] plsnUndoNext
Puntero a una estructura de CLFS_LSN que recibe el LSN del siguiente registro en la cadena de registros deshacer.
[out] plsnPrevious
Puntero a una estructura de CLFS_LSN que recibe el LSN del siguiente registro de la cadena de registros anterior.
[out] ppvReadContext
Puntero a una variable que recibe un puntero a un contexto de lectura asignado por el sistema cuando una lectura se realiza correctamente.
Si la función aplaza la finalización de una operación, devuelve un puntero de contexto de lectura válido y un estado de error de ERROR_IO_PENDING. En todos los demás errores, el puntero de contexto de lectura es NULL. Para obtener más información sobre cómo controlar la finalización diferida de la función, vea la sección Comentarios de este tema.
Después de obtener todos los registros de registro solicitados, el cliente debe pasar el contexto de lectura a TerminateReadLog para liberar la memoria asociada. Si no lo hace, se produce una pérdida de memoria.
[in, out, optional] pOverlapped
Puntero a una estructura SUPERPUESTA , que es necesaria para la operación asincrónica.
Este parámetro puede ser NULL si no se usa la operación asincrónica.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
En la lista siguiente se identifican los posibles códigos de error.
Comentarios
El mensaje de error ERROR_LOG_BLOCK_INCOMPLETE se devuelve si el tamaño del bloque de registro especificado por CreateLogMarshallingArea no es lo suficientemente grande como para contener un bloque de registro completo.
Si se llama a ReadLogRecord con una estructura pOverlapped válida y el identificador de registro se crea con la opción superpuesta, si se produce un error en una llamada a esta función con un código de error de ERROR_IO_PENDING, se coloca un puntero a un contexto de lectura válido en la variable a la que apunta el parámetro ppvReadContext .
Si intenta abrir más contextos de lectura que los búferes de números especificados en una llamada anterior a CreateLogMarshallingArea, se devuelve ERROR_LOG_BLOCK_EXHAUSTED.
Para completar una copia de registro de registro, el cliente debe sincronizar primero su ejecución con la finalización diferida de la operación de E/S superpuesta mediante GetOverlappedResult o una de las funciones de espera de sincronización. Para obtener más información, vea Sincronización y entrada y salida superpuestas.
Una vez que ReadLogRecord se completa de forma asincrónica, el registro solicitado se lee desde el disco, pero no se resuelve en un puntero de *ppvReadBuffer.
Para completar la lectura solicitada y obtener un puntero válido al registro de registro, el cliente debe llamar a ReadNextLogRecord, que pasa el puntero de contexto de lectura que ReadLogRecord devuelve.
Los contextos de lectura de CLFS no deben pasarse a más de una lectura asincrónica a la vez o se produce un error en la función con ERROR_BUSY.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 R2 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | clfsw32.h |
Library | Clfsw32.lib |
Archivo DLL | Clfsw32.dll |