Função ClfsReserveAndAppendLog (wdm.h)

A rotina ClfsReserveAndAppendLog reserva espaço em uma área de marshalling ou acrescenta um registro a uma área de marshalling ou faz ambos atomicamente.

Sintaxe

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

Um ponteiro para um contexto opaco que representa uma área de marshalling associada a um fluxo CLFS. O chamador obteve esse ponteiro anteriormente chamando ClfsCreateMarshallingArea.

[in, optional] rgWriteEntries

Um ponteiro para uma matriz de estruturas CLFS_WRITE_ENTRY , cada uma das quais contém um ponteiro para um buffer de dados que se tornará parte do registro que é acrescentado ao log. Esse parâmetro poderá ser NULL se cWriteEntries for zero.

[in] cWriteEntries

O número de elementos na matriz apontada por rgWriteEntries. Esse parâmetro deverá ser zero se rgWriteEntries for NULL.

[in, optional] plsnUndoNext

Um ponteiro para uma estrutura CLFS_LSN que fornece o LSN de desfazer o próximo registro a ser acrescentado.

[in, optional] plsnPrevious

Um ponteiro para uma estrutura CLFS_LSN que fornece o LSN anterior do registro a ser acrescentado.

[in] cReserveRecords

O número de elementos na matriz apontada por rgcbReservation. Esse parâmetro deverá ser zero se rgcbReservation for NULL ou o sinalizador CLFS_FLAG_USE_RESERVATION de fFlags estiver definido.

[in, out] rgcbReservation

Um ponteiro para uma matriz de variáveis do tipo LONGLONG. O chamador define cada elemento da matriz como o tamanho, em bytes, de um registro que deve ter espaço reservado para ele. No retorno, cada elemento de matriz recebe esse tamanho real do espaço reservado para o registro. Isso inclui o espaço necessário para cabeçalhos e alinhamento. Se o valor da reserva for negativo, um registro reservado que quase corresponde ao valor absoluto do valor negativo fornecido será liberado. Esse parâmetro poderá ser NULL se cReserveRecords for zero e precisar ser NULL se o sinalizador CLFS_FLAG_USE_RESERVATION de fFlags estiver definido.

[in] fFlags

Esse parâmetro pode ser zero ou qualquer combinação dos sinalizadores a seguir.

Sinalizador Significado
CLFS_FLAG_FORCE_APPEND Depois que o registro atual é acrescentado a um bloco de E/S de log, o bloco é enfileirado, na sequência LSN, para o armazenamento estável. Esse sinalizador não fornece nenhuma garantia de que o registro seja forçado ao armazenamento estável (consulte CLFS_FLAG_FORCE_FLUSH).
CLFS_FLAG_FORCE_FLUSH Depois que o registro atual é acrescentado a um bloco de E/S de log, o bloco é forçado ao armazenamento estável.
CLFS_FLAG_USE_RESERVATION O registro atual é colocado em espaço reservado em um bloco de E/S de log dentro da área de marshalling. O número de registros reservados na área de marshalling é reduzido em um. Se esse sinalizador estiver definido, cReserveRecords deverá ser zero e rgcbReservation deverá ser NULL.

[out, optional] plsn

Um ponteiro para uma estrutura CLFS_LSN que recebe o LSN do registro acrescentado. Esse parâmetro poderá ser NULL se cWriteEntries for zero.

Retornar valor

ClfsReserveAndAppendLog retornará STATUS_SUCCESS se for bem-sucedido; caso contrário, retornará um dos códigos de erro definidos em Ntstatus.h.

Comentários

A rotina ClfsReserveAndAppendLog altera seu comportamento fundamental com base na presença de parâmetros opcionais e no estado do sinalizador CLFS_USE_RESERVATION. A tabela a seguir resume cenários comuns.

Valores de parâmetro e sinalizador Ações executadas
cWriteEntries = 0.

rgWriteEntries = NULL.

plsn = NULL.

Reserva espaço para um conjunto de registros, mas não acrescenta os registros à área de marshalling. O parâmetro rgcbReservation fornece o tamanho da parte de dados de cada registro que precisa de espaço reservado.
cWriteEntries > 0.

rgWriteEntries não é NULL.

plsn não é NULL.

cReserveRecords = 0.

rgcbReservation é NULL.

CLFS_USE_RESERVATION está definido.

Acrescenta um registro à área de marshalling usando o espaço que já foi reservado. Reduz o número de espaços de registro reservados em um.
cWriteEntries > 0.

rgWriteEntries não é NULL.

plsn não é NULL.

cReserveRecords = 0.

rgcbReservation é NULL.

CLFS_USE_RESERVATION está limpo.

Acrescenta um registro à área de marshalling reservando um novo espaço. Deixa o número de espaços de registro reservados inalterados.
cWriteEntries > 0.

rgWriteEntries não é NULL.

plsn não é NULL.

cReserveRecords> 0.

rgcbReservation não é NULL.

CLFS_USE_RESERVATION sinalizador está limpo.

Acrescenta um registro à área de marshalling reservando um novo espaço. Também reserva espaço para um conjunto de registros que não são acrescentados no momento. O parâmetro rgcbReservation fornece o tamanho de cada registro que precisa de espaço reservado. Aumenta o número de espaços de registro reservados pelo valor de cReserveRecords.
 

Chamar ClfsReserveAndAppendLog é equivalente a chamar ClfsReserveAndAppendLogAligned com o parâmetro cbEntryAlignment definido como um.

Para obter uma explicação dos conceitos e terminologia do CLFS, consulte Common Log File System.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows Server 2003 R2, Windows Vista e versões posteriores do Windows.
Plataforma de Destino Área de Trabalho
Cabeçalho wdm.h (inclua Wdm.h)
Biblioteca Clfs.lib
DLL Clfs.sys
IRQL <= APC_LEVEL

Confira também

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLogAligned