Compartilhar via


Função ClfsCreateMarshallingArea (wdm.h)

A rotina ClfsCreateMarshallingArea cria uma área de marshalling para um fluxo CLFS e retorna um ponteiro para um contexto opaco que representa a nova área de marshalling.

Sintaxe

CLFSUSER_API NTSTATUS ClfsCreateMarshallingArea(
  [in]           PLOG_FILE_OBJECT   plfoLog,
  [in]           POOL_TYPE          ePoolType,
  [in, optional] PALLOCATE_FUNCTION pfnAllocBuffer,
  [in, optional] PFREE_FUNCTION     pfnFreeBuffer,
  [in]           ULONG              cbMarshallingBuffer,
  [in]           ULONG              cMaxWriteBuffers,
  [in]           ULONG              cMaxReadBuffers,
  [out]          PVOID              *ppvMarshalContext
);

Parâmetros

[in] plfoLog

Um ponteiro para uma estrutura LOG_FILE_OBJECT que representa um fluxo CLFS. O chamador obteve esse ponteiro anteriormente chamando ClfsCreateLogFile.

[in] ePoolType

Um valor POOL_TYPE que especifica o tipo de memória (paginado, não paginado, por exemplo) que a nova área de marshalling usará para seus blocos de E/S de log.

[in, optional] pfnAllocBuffer

NULL ou um ponteiro para uma função fornecida pelo chamador que aloca um bloco de E/S de log para a área de marshalling. A função de alocação tem o seguinte protótipo:

PVOID
(*PALLOCATE_FUNCTION) (
    IN POOL_TYPE PoolType,
    IN SIZE_T NumberOfBytes,
    IN ULONG Tag
    );

O valor retornado da função de alocação é um ponteiro para o bloco de E/S de log recém-alocado.

[in, optional] pfnFreeBuffer

NULL ou um ponteiro para uma função fornecida pelo chamador que libera um bloco de E/S de log que foi alocado anteriormente por pfnAllocBuffer. A função tem o seguinte protótipo:

VOID
(*PFREE_FUNCTION) (
    IN PVOID Buffer
    );

[in] cbMarshallingBuffer

O tamanho, em bytes, dos blocos de E/S de log individuais que a nova área de marshalling usa. Esse deve ser um múltiplo do tamanho do setor no meio de armazenamento estável. O tamanho do setor é o valor lpBytesPerSector retornado de GetDiskFreeSpace.

[in] cMaxWriteBuffers

O número máximo de blocos de E/S que podem ser alocados ao mesmo tempo para operações de gravação. Esse parâmetro afeta a frequência de liberações de dados. Se você não precisar controlar a frequência de liberações de dados, defina esse parâmetro como INFINITE.

[in] cMaxReadBuffers

O número máximo de blocos de E/S de log que podem ser alocados ao mesmo tempo para operações de leitura.

[out] ppvMarshalContext

Um ponteiro para uma variável que recebe um ponteiro para um contexto opaco que representa a nova área de marshalling.

Retornar valor

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

Comentários

Os parâmetros pfnAllocBuffer e pfnFreeBuffer devem apontar para funções alocadas pelo chamador ou ambas devem ser NULL. Se ambos forem NULL, o CLFS fornecerá funções padrão para alocar e liberar blocos de E/S de log.

Antes de chamar ClfsCreateMarshallingArea, você deve adicionar pelo menos dois contêineres ao log subjacente chamando ClfsAddLogContainer ou ClfsAddLogContainerSet.

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

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho wdm.h (inclua Wdm.h)
Biblioteca Clfs.lib
DLL Clfs.sys
IRQL IRQL <= APC_LEVEL

Confira também

ClfsAddLogContainer

ClfsAddLogContainerSet

ClfsCreateLogFile

ClfsDeleteMarshallingArea

LOG_FILE_OBJECT

POOL_TYPE