Compartilhar via


Função ClfsReserveAndAppendLogAligned (wdm.h)

A rotina ClfsReserveAndAppendLogAligned reserva espaço em uma área de marshalling ou acrescenta um registro a uma área de marshalling ou faz ambos atomicamente. Os dados do registro estão alinhados nos limites especificados.

Sintaxe

CLFSUSER_API NTSTATUS ClfsReserveAndAppendLogAligned(
  [in]            PVOID             pvMarshalContext,
  [in, optional]  PCLFS_WRITE_ENTRY rgWriteEntries,
  [in]            ULONG             cWriteEntries,
  [in]            ULONG             cbEntryAlignment,
  [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] cbEntryAlignment

O alinhamento de bytes das entradas de dados apontadas por rgWriteEntries à medida que são empacotadas em um único registro. Um valor de um especifica concatenação simples (consulte ClfsReserveAndAppendLog). Um valor maior que um pode resultar na colocação de zeros entre entradas no registro. O valor desse parâmetro deve ser maior que zero.

[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 reserva de espaço 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 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. 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

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

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

ClfsReserveAndAppendLog