Compartilhar via


Função ClfsReserveAndAppendLog (wdm.h)

O ClfsReserveAndAppendLog de rotina 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 de CLFS_WRITE_ENTRY, cada uma das quais contém um ponteiro para um buffer de dados que se tornará parte do registro acrescentado ao log. Esse parâmetro poderá ser NULL se cWriteEntries for zero.

[in] cWriteEntries

O número de elementos na matriz apontado por rgWriteEntries. Esse parâmetro deve ser zero se rgWriteEntries estiver NULL.

[in, optional] plsnUndoNext

Um ponteiro para uma estrutura CLFS_LSN que fornece o LSN de desfazer-próximo do 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 apontado 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.

Bandeira 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 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.

Valor de retorno

ClfsReserveAndAppendLog retornará STATUS_SUCCESS se tiver êxito; caso contrário, ele retorna um dos códigos de erro definidos em Ntstatus.h.

Observações

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 reservados de registro 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
de cliente com suporte mínimo Disponível no Windows Server 2003 R2, Windows Vista e versões posteriores do Windows.
da Plataforma de Destino Área de trabalho
cabeçalho wdm.h (inclua Wdm.h)
biblioteca Clfs.lib
de DLL Clfs.sys
IRQL <= APC_LEVEL

Consulte também

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLogAligned