Função ClfsCreateLogFile (wdm.h)

A rotina ClfsCreateLogFile cria ou abre um fluxo CLFS. Se necessário, ClfsCreateLogFile também cria o log físico subjacente que contém os registros do fluxo.

Sintaxe

CLFSUSER_API NTSTATUS ClfsCreateLogFile(
  [out]          PPLOG_FILE_OBJECT    pplfoLog,
  [in]           PUNICODE_STRING      puszLogFileName,
  [in]           ACCESS_MASK          fDesiredAccess,
  [in]           ULONG                dwShareMode,
  [in, optional] PSECURITY_DESCRIPTOR psdLogFile,
  [in]           ULONG                fCreateDisposition,
  [in]           ULONG                fCreateOptions,
  [in]           ULONG                fFlagsAndAttributes,
  [in]           ULONG                fLogOptionFlag,
  [in, optional] PVOID                pvContext,
  [in]           ULONG                cbContext
);

Parâmetros

[out] pplfoLog

Um ponteiro para uma variável que recebe um ponteiro para uma estrutura LOG_FILE_OBJECT que representa uma instância aberta do fluxo.

[in] puszLogFileName

Um ponteiro para uma estrutura UNICODE_STRING que fornece o nome do fluxo ou o log físico subjacente.

Se o fluxo já existir e for o único fluxo de um log dedicado, o nome terá o nome log:physical log do formulário, em que o nome do log físico é o nome do caminho, no sistema de arquivos subjacente, do log físico existente que contém os registros do fluxo.

Se o fluxo ainda não existir e se tornar o único fluxo de um log dedicado (que ainda não existe), o nome terá o nome log:physical log do formulário, em que o nome do log físico é o nome do caminho, no sistema de arquivos subjacente, do log físico que será criado para manter os registros do fluxo.

Se o fluxo for (ou se tornar) um dos fluxos de um log multiplexado, o nome terá o nome log:physical log::stream, em que o nome do log físico é o nome do caminho, no sistema de arquivos subjacente, do log físico que contém os registros do fluxo e o nome do fluxo é o nome de um fluxo que compartilha (ou compartilhará) esse log físico.

Se você quiser criar um log multiplexado que não tenha fluxos por enquanto, use um nome do formulário log:physical log name::, em que nome do log físico é o nome do caminho, no sistema de arquivos subjacente, do log físico a ser criado.

A lista a seguir fornece alguns exemplos de nomes válidos.

  • "Log:c:\myLog" cria ou abre um log dedicado e seu único fluxo.
  • "Log:c:\myCommonLog::" cria um log multiplexado que ainda não tem fluxos.
  • "Log:c:\myCommonLog::Stream1" cria ou abre um dos fluxos (Stream1) de um log multiplexado.

[in] fDesiredAccess

Um ACCESS_MASK que fornece o tipo de acesso que o cliente terá (usando o ponteiro retornado em pplfoLog) para o fluxo. Se esse parâmetro for zero, os clientes poderão consultar o fluxo em busca de seus atributos, mas não poderão ler ou gravar no fluxo. Esse parâmetro pode ser zero ou qualquer combinação dos seguintes sinalizadores:

Sinalizador Significado
GENERIC_READ O cliente tem acesso de leitura ao fluxo.
GENERIC_WRITE O cliente tem acesso de gravação ao fluxo.
DELETE O cliente pode marcar o fluxo para exclusão.

[in] dwShareMode

O modo de compartilhamento do fluxo, que pode ser zero (não compartilhado) ou qualquer combinação dos seguintes sinalizadores:

Sinalizador Significado
FILE_SHARE_DELETE As solicitações subsequentes para abrir o fluxo com acesso de exclusão serão bem-sucedidas.
FILE_SHARE_READ As solicitações subsequentes para abrir o fluxo com acesso de leitura serão bem-sucedidas.
FILE_SHARE_WRITE As solicitações subsequentes para abrir o fluxo com acesso de gravação serão bem-sucedidas.

[in, optional] psdLogFile

Um ponteiro para uma estrutura SECURITY_DESCRIPTOR que fornece atributos de segurança para o fluxo. Este parâmetro pode ser NULL.

[in] fCreateDisposition

A ação a ser tomada depende se o fluxo já existe. Esse parâmetro deve ser definido como um dos seguintes valores:

Valor Significado
CREATE_NEW Crie um novo fluxo se o fluxo ainda não for encerrado. Falha se o fluxo já existir.
OPEN_EXISTING Abra um fluxo existente. Falhará se o fluxo ainda não existir.
OPEN_ALWAYS Abra um fluxo existente. Crie o fluxo se ele ainda não existir.

[in] fCreateOptions

Um conjunto de sinalizadores que especificam opções a serem aplicadas ao criar ou abrir o fluxo. Esse parâmetro pode ser zero ou uma combinação compatível dos seguintes sinalizadores:

Sinalizador Significado
FILE_NO_INTERMEDIATE_BUFFERING Os registros do fluxo não podem ser armazenados em cache nos buffers internos de um driver.
FILE_SYNCHRONOUS_IO_ALERT Todas as operações no fluxo são executadas de forma síncrona. Qualquer espera em nome do chamador está sujeita ao encerramento prematuro de alertas. Se esse sinalizador estiver definido, o sinalizador FILE_SYNCHRONOUS_IO_NONALERT deverá ser limpo.
FILE_SYNCHRONOUS_IO_NONALERT Todas as operações no fluxo são executadas de forma síncrona. As esperas no sistema que sincronizam a fila de E/S e a conclusão não estão sujeitas a alertas. Se esse sinalizador estiver definido, o sinalizador FILE_SYNCHRONOUS_IO_ALERT deverá ser limpo.

[in] fFlagsAndAttributes

Um valor que especifica se o fluxo é aberto para acesso normal ou somente leitura. Esse parâmetro deve ser definido como

FILE_ATTRIBUTE_NORMAL ou FILE_ATTRIBUTE_READONLY.

[in] fLogOptionFlag

Uma dica sobre a relação entre o CLFS e o componente que cria ou abre o fluxo. Esse parâmetro deve ser definido como um dos seguintes valores:

Valor Significado
CLFS_FLAG_NO_FLAGS O CLFS e o componente de criação têm a relação padrão e normal. Os componentes do modo kernel usam esse valor, a menos que se enquadram em uma das três outras categorias listadas nesta tabela. Se pvContext não for NULL, o CLFS verificará se cbContext é maior que zero. Caso contrário, pvContext e cbContext serão ignorados.
CLFS_FLAG_REENTRANT_FILE_SYSTEM O componente de criação é o sistema de arquivos que fornece o armazenamento subjacente para CLFS. O CLFS usa o sistema de arquivos para alocar contêineres e o sistema de arquivos usa fluxos CLFS. Nesse caso, é possível que o sistema de arquivos chame CLFS e CLFS para fazer chamadas de volta para o sistema de arquivos no mesmo thread ou threads diferentes. Se pvContext não for NULL, o CLFS verificará se cbContext é maior que zero. Caso contrário, pvContext e cbContext serão ignorados.
CLFS_FLAG_NON_REENTRANT_FILTER O componente de criação é um driver de filtro do sistema de arquivos que envia toda a E/S do CLFS para um nível especificado abaixo de si mesmo na pilha de filtros. Essa opção permite que um driver de filtro crie um log CLFS sem ver sua própria E/S de log. O chamador passa o objeto de dispositivo de destino não NULL no parâmetro pvContext com cbContext definido para o tamanho apropriado. O CLFS usa a rotina IoCreateFileSpecifyDeviceObjectHint para criar contêineres em um nível de destino na pilha de filtros de E/S especificada pelo objeto do dispositivo.
CLFS_FLAG_REENTRANT_FILTER O componente de criação é um driver de filtro do sistema de arquivos que envia toda a E/S do CLFS para a parte superior da pilha de filtros. O filtro tem uma relação recursiva com o CLFS porque filtra sua própria E/S de log quando o CLFS executa qualquer operação do sistema de arquivos em seus contêineres. O parâmetro pvContext fornece um meio para os filtros associarem um contexto reconhecível a seus contêineres CLFS à medida que a E/S de log desativa a pilha de filtros. O parâmetro cbContext especifica o tamanho do contexto opaco em bytes.
CLFS_FLAG_MINIFILTER_LEVEL O componente de criação é um driver de minifiltro do sistema de arquivos que envia toda a E/S do CLFS para um nível especificado abaixo de si mesmo na pilha de filtros. Essa opção permite que um minifiltro crie um log CLFS sem ver sua própria E/S de registro em log. O chamador passa o objeto de contexto de minifiltro não NULL no parâmetro pvContext com cbContext definido como o tamanho apropriado. O CLFS usa a rotina IoCreateFileSpecifyDeviceObjectHint para criar contêineres em uma altitude (especificada dentro do contexto de minifiltro) na pilha de minifiltros do gerenciador de filtros.

[in, optional] pvContext

Um ponteiro para um contexto. A maneira como o contexto é interpretado depende do valor passado para fLogOptionsFlag.

[in] cbContext

O tamanho, em bytes, do contexto apontado por pvContext. Se pvContext não for NULL, esse parâmetro deverá ser maior que zero.

Retornar valor

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

Comentários

Quando você cria um fluxo CLFS, ele é apoiado por um log CLFS físico subjacente. O log subjacente pode ser dedicado (só faz backup de um fluxo) ou multiplexado (faz backup de vários fluxos). Um log dedicado não pode ser convertido em um log multiplexado e um log multiplexado não pode ser convertido em um log dedicado.

Um nome de log CLFS físico não inclui a extensão .blf.

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

ClfsCloseAndResetLogFile

ClfsCloseLogFileObject

ClfsDeleteLogByPointer

ClfsDeleteLogFile