Função FltQueryDirectoryFile (fltkernel.h)

A rotina FltQueryDirectoryFile retorna vários tipos de informações sobre arquivos no diretório especificado por um determinado objeto de arquivo. Use FltQueryDirectoryFileEx para maior controle de consulta.

Sintaxe

NTSTATUS FLTAPI FltQueryDirectoryFile(
  [in]            PFLT_INSTANCE          Instance,
  [in]            PFILE_OBJECT           FileObject,
  [out]           PVOID                  FileInformation,
  [in]            ULONG                  Length,
  [in]            FILE_INFORMATION_CLASS FileInformationClass,
  [in]            BOOLEAN                ReturnSingleEntry,
  [in, optional]  PUNICODE_STRING        FileName,
  [in]            BOOLEAN                RestartScan,
  [out, optional] PULONG                 LengthReturned
);

Parâmetros

[in] Instance

Ponteiro opaco para a instância do driver de filtro que inicia a E/S.

[in] FileObject

Ponteiro para o objeto de arquivo que representa o diretório a ser examinado.

[out] FileInformation

Ponteiro para um buffer que recebe as informações desejadas sobre o arquivo. A estrutura das informações retornadas no buffer é definida pelo parâmetro FileInformationClass .

[in] Length

Tamanho, em bytes, do buffer apontado por FileInformation. O chamador deve definir esse parâmetro de acordo com o FileInformationClass especificado.

[in] FileInformationClass

Tipo de informação a ser retornada sobre arquivos no diretório. Consulte o parâmetro FileInformationClass de NtQueryDirectoryFileEx para obter a lista de valores possíveis.

[in] ReturnSingleEntry

Defina como TRUE se apenas uma única entrada deve ser retornada, caso contrário, FALSE . Se esse parâmetro for TRUE, FltQueryDirectoryFile retornará apenas a primeira entrada encontrada.

[in, optional] FileName

Ponteiro para uma cadeia de caracteres Unicode alocada pelo chamador que contém o nome de um arquivo (ou vários arquivos, se curingas forem usados) no diretório especificado por FileObject. Esse parâmetro é opcional e pode ser NULL.

Se FileName não for NULL, somente os arquivos cujos nomes correspondem à cadeia de caracteres FileName serão incluídos na verificação de diretório. Se FileName for NULL, todos os arquivos serão incluídos. Se RestartScan for FALSE, o valor de FileName será ignorado.

[in] RestartScan

Defina como TRUE se a verificação for iniciada na primeira entrada no diretório. Defina como FALSE se retomar a verificação de uma chamada anterior. O chamador deve definir esse parâmetro como TRUE ao chamar FltQueryDirectoryFile pela primeira vez.

[out, optional] LengthReturned

Recebe o número de bytes realmente gravados no buffer FileInformation fornecido.

Retornar valor

FltQueryDirectoryFile retorna STATUS_SUCCESS ou um erro apropriado status. Observe que o conjunto de erros status valores que podem ser retornados é específico do sistema de arquivos.

Comentários

FltQueryDirectoryFile retorna informações sobre arquivos contidos no diretório representado por FileObject.

A primeira chamada para FltQueryDirectoryFile determina o conjunto de entradas a serem incluídas na verificação de diretório para todas as chamadas subsequentes, com base nos valores de ReturnSingleEntry, FileName e RestartScan. Se houver pelo menos uma entrada correspondente, FltQueryDirectoryFile criará uma estrutura FILE_XXX_INFORMATION (consulte a tabela acima) para cada entrada e armazenará a estrutura no buffer.

Supondo que pelo menos uma entrada de diretório correspondente seja encontrada, o número de entradas para as quais as informações são retornadas é o menor dos seguintes:

  • Uma entrada, se ReturnSingleEntry for TRUE e FileName for NULL.

  • O número de entradas que correspondem à cadeia de caracteres FileName , se FileName não for NULL. (Observe que, se a cadeia de caracteres não contiver caracteres curinga, poderá haver no máximo uma entrada correspondente.)

  • O número de entradas cujas informações se encaixam no buffer especificado.

  • O número de entradas contidas no diretório.

Na primeira chamada para FltQueryDirectoryFile, se a estrutura criada para a primeira entrada for muito grande para caber no buffer de saída, somente a parte fixa da estrutura será retornada. A parte fixa consiste em todos os campos da estrutura, exceto a cadeia de caracteres FileName final. Na primeira chamada, mas não nas subsequentes, o sistema de E/S garante que o buffer seja grande o suficiente para manter a parte fixa da estrutura FILE_XXX_INFORMATION apropriada. Quando isso acontece, FltQueryDirectoryFile retorna um valor status apropriado, como STATUS_BUFFER_OVERFLOW. Também na primeira chamada para FltQueryDirectoryFile, se não houver nenhum arquivo no diretório FileObject que corresponda ao parâmetro FileName, FltQueryDirectoryFile retornará um valor status apropriado, como STATUS_NO_SUCH_FILE.

Em cada chamada, FltQueryDirectoryFile retorna quantas estruturas FILE_XXX_INFORMATION (uma por entrada de diretório) como podem ser contidas inteiramente no buffer apontado por FileInformation. Desde que o buffer de saída contenha pelo menos uma estrutura completa, o valor de status retornado é STATUS_SUCCESS. Nenhuma informação sobre as entradas restantes é relatada. Assim, exceto nos casos listados acima em que apenas uma entrada é retornada, FltQueryDirectoryFile deve ser chamado pelo menos duas vezes para enumerar o conteúdo de um diretório inteiro (por exemplo, quando o parâmetro FileName contém um ou mais caracteres curinga ou é NULL).

A chamada final para FltQueryDirectoryFile retorna um buffer de saída vazio e relata um valor de status apropriado, como STATUS_NO_MORE_FILES.

Observação

Quando FltQueryDirectoryFile é chamado várias vezes no mesmo diretório, é possível que o número de entradas para as quais as informações são retornadas seja menor do que o esperado. Isso ocorre porque o conjunto de entradas a serem incluídas na verificação de diretório é corrigido na primeira chamada para FltQueryDirectoryFile. Em chamadas subsequentes, FltQueryDirectoryFile retoma a verificação de diretório onde quer que ela parou nessa mesma enumeração. No entanto, entre chamadas para FltQueryDirectoryFile, as entradas de diretório reais podem ser alteradas para que não estejam mais sincronizadas com a enumeração original.

FltQueryDirectoryFile retorna zero em qualquer membro de uma estrutura FILE_XXX_INFORMATION que não é compatível com o sistema de arquivos.

Para obter informações sobre outras rotinas de consulta de informações de arquivo, consulte Objetos de Arquivo.

Os chamadores de FltQueryDirectoryFile devem estar em execução em IRQL = PASSIVE_LEVEL e com APCs habilitadas. Para obter mais informações, consulte Desabilitando APCs.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL (consulte a seção Comentários)

Confira também

FILE_BOTH_DIR_INFORMATION

FILE_DIRECTORY_INFORMATION

FILE_FULL_DIR_INFORMATION

FILE_ID_BOTH_DIR_INFORMATION

FILE_ID_EXTD_BOTH_DIR_INFORMATION

FILE_ID_EXTD_DIR_INFORMATION

FILE_ID_FULL_DIR_INFORMATION

FILE_ID_GLOBAL_TX_DIR_INFORMATION

FILE_NAMES_INFORMATION

FILE_OBJECTID_INFORMATION

FILE_QUOTA_INFORMATION

FILE_REPARSE_POINT_INFORMATION

FltCreateFile

FltCreateFileEx

FltCreateFileEx2

FltQueryDirectoryFileEx

IRP_MJ_DIRECTORY_CONTROL IRP

UNICODE_STRING

ZwQueryDirectoryFile