Função ReadLogRecord (clfsw32.h)

Inicia uma sequência de leituras de um LSN (número de sequência de log) especificado em um dos três modos e retorna o primeiro dos registros de log especificados e um contexto de leitura. Um cliente pode ler registros subsequentes no modo designado passando o contexto de leitura para ReadNextLogRecord.

Sintaxe

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

Um ponteiro para um contexto de marshaling alocado usando a função CreateLogMarshallingArea .

[in] plsnFirst

Um ponteiro para uma estrutura CLFS_LSN que especifica o LSN (número de sequência de log) do registro em que a operação de leitura deve ser iniciada.

Esse valor deve ser um LSN de um registro válido no intervalo ativo do log.

[in] eContextMode

O modo para o contexto de leitura retornado em *ppvReadContext.

A tabela a seguir identifica os três modos de leitura mutuamente exclusivos.

Valor Significado
ClfsContextPrevious
Lê o registro vinculado por plsnPrevious.
ClfsContextUndoNext
Lê a cadeia de registros vinculada por plsnUndoNext.
ClfsContextForward
Lê o registro com o LSN que segue imediatamente o LSN atual no contexto de leitura.

[out] ppvReadBuffer

Um ponteiro para uma variável que recebe um ponteiro para o registro de destino no bloco de E/S de log.

[out] pcbReadBuffer

Um ponteiro para uma variável que recebe o tamanho dos dados retornados em *ppvReadBuffer, em bytes.

[out] peRecordType

Um ponteiro para uma variável que recebe o tipo de leitura de registro.

Esse parâmetro é uma das constantes CLFS_RECORD_TYPE.

[out] plsnUndoNext

Um ponteiro para uma estrutura CLFS_LSN que recebe o LSN do próximo registro na cadeia de registros desfazer.

[out] plsnPrevious

Um ponteiro para uma estrutura CLFS_LSN que recebe o LSN do próximo registro na cadeia de registros anterior.

[out] ppvReadContext

Um ponteiro para uma variável que recebe um ponteiro para um contexto de leitura alocado pelo sistema quando uma leitura é bem-sucedida.

Se a função adiar a conclusão de uma operação, ela retornará um ponteiro de contexto de leitura válido e um status de erro de ERROR_IO_PENDING. Em todos os outros erros, o ponteiro de contexto de leitura é NULL. Para obter mais informações sobre como lidar com a conclusão adiada da função, consulte a seção Comentários deste tópico.

Depois de obter todos os registros de log solicitados, o cliente deve passar o contexto de leitura para TerminateReadLog para liberar a memória associada. A falha ao fazer isso resulta em perda de memória.

Nota Os contextos comuns de leitura do CLFS (Sistema de Arquivos de Log) não são thread-safe. Eles não devem ser usados por mais de um thread por vez ou passados para mais de uma leitura assíncrona por vez.
 

[in, out, optional] pOverlapped

Um ponteiro para uma estrutura OVERLAPPED , que é necessária para a operação assíncrona.

Esse parâmetro poderá ser NULL se a operação assíncrona não for usada.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

A lista a seguir identifica os possíveis códigos de erro.

Comentários

A mensagem de erro ERROR_LOG_BLOCK_INCOMPLETE será retornada se o tamanho do bloco de log especificado por CreateLogMarshallingArea não for grande o suficiente para manter um bloco de log completo.

Se ReadLogRecord for chamado com uma estrutura pOverlapped válida e o identificador de log for criado com a opção sobreposta, se uma chamada para essa função falhar com um código de erro de ERROR_IO_PENDING, um ponteiro para um contexto de leitura válido será colocado na variável apontada pelo parâmetro ppvReadContext .

Se você tentar abrir mais contextos de leitura do que os buffers de número especificados em uma chamada anterior para CreateLogMarshallingArea, ERROR_LOG_BLOCK_EXHAUSTED será retornado.

Para concluir uma cópia de registro de log, o cliente deve primeiro sincronizar sua execução com a conclusão adiada da operação de E/S sobreposta usando GetOverlappedResult ou uma das funções de espera de sincronização. Para obter mais informações, consulte Sincronização e Entrada e saída sobrepostas.

Depois que ReadLogRecord for concluído de forma assíncrona, o registro solicitado será lido do disco, mas não será resolvido para um ponteiro em *ppvReadBuffer.

Para concluir a leitura solicitada e obter um ponteiro válido para o registro de log, o cliente deve chamar ReadNextLogRecord, que passa o ponteiro de contexto de leitura que ReadLogRecord retorna.

Nota Os contextos comuns de leitura do CLFS (Sistema de Arquivos de Log) não são thread-safe. Eles não devem ser usados por mais de um thread por vez.

Os contextos de leitura do CLFS não devem ser passados para mais de uma leitura assíncrona por vez ou a função falha com ERROR_BUSY.

 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho clfsw32.h
Biblioteca Clfsw32.lib
DLL Clfsw32.dll

Confira também

CLFS_CONTEXT_MODE

CLFS_LSN

CLFS_RECORD_TYPE

Funções comuns do sistema de arquivos de log

CreateLogMarshallingArea

OVERLAPPED

ReadNextLogRecord

TerminateReadLog