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 |