IRP_MJ_DIRECTORY_CONTROL (FS e drivers de filtro)

Quando enviado

O Gerenciador de E/S, outros componentes do sistema operacional e outros drivers de modo kernel enviam IRP_MJ_DIRECTORY_CONTROL solicitações. Ele pode ser enviado, por exemplo, quando um aplicativo de modo de usuário tiver chamado uma função Win32 como ReadDirectoryChangesW ou FindNextVolumeMountPoint ou quando um componente do modo kernel tiver chamado ZwQueryDirectoryFile ou ZwQueryDirectoryFileEx.

Operação: Drivers do sistema de arquivos

O driver do sistema de arquivos deve marcar o código de função secundária para determinar qual operação de controle de diretório é solicitada. Estes são os códigos de função secundária válidos:

Código Descrição
IRP_MN_QUERY_DIRECTORY Indica uma solicitação de consulta de diretório. Os tipos de informações que podem ser consultadas dependem do sistema de arquivos, mas geralmente incluem os seguintes valores: FileBothDirectoryInformation, FileDirectoryInformation, FileFullDirectoryInformation, FileIdBothDirectoryInformation, FileIdFullDirectoryInformation, FileNamesInformation, FileObjectIdInformation, FileReparsePointInformation.
IRP_MN_NOTIFY_CHANGE_DIRECTORY Indica uma solicitação de notificação de alterações no diretório. Normalmente, em vez de atender a essa solicitação imediatamente, o driver do sistema de arquivos mantém o IRP em uma fila privada. Quando ocorre uma alteração no diretório, o driver do sistema de arquivos executa a notificação e desativa e conclui o IRP. O driver do sistema de arquivos retorna as informações em uma estrutura FILE_NOTIFY_INFORMATION .
IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX Indica uma solicitação de notificação de alterações no diretório. Normalmente, em vez de atender a essa solicitação imediatamente, o driver do sistema de arquivos mantém o IRP em uma fila privada. Quando ocorre uma alteração no diretório, o driver do sistema de arquivos executa a notificação e desativa e conclui o IRP. O driver do sistema de arquivos retorna informações com base no IrpSp-Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass> especificado.

Observação

A classe de informações FileQuotaInformation está obsoleta. IRP_MJ_QUERY_QUOTA deve ser usado.

O driver do sistema de arquivos deve concluir o IRP depois de executar a operação solicitada.

Operação: Drivers de filtro do sistema de arquivos herdado

O driver de filtro deve passar esse IRP para o driver inferior na pilha.

Parâmetros

Um sistema de arquivos ou driver de filtro chama IoGetCurrentIrpStackLocation para o IRP fornecido para obter um ponteiro para seu próprio local de pilha no IRP. Nos parâmetros a seguir, Irp aponta para os pontos IRP e IrpSp para o IO_STACK_LOCATION. O driver pode usar as informações definidas nos seguintes membros do IRP e no local da pilha IRP para processar uma solicitação de controle de diretório.

  • DeviceObject é um ponteiro para o objeto de dispositivo de destino.

  • Irp->AssociatedIrp.SystemBuffer aponta para uma estrutura IO_STATUS_BLOCK que recebe o status de conclusão final e informações sobre a operação solicitada.

  • Irp->UserBuffer aponta para um buffer de saída fornecido pelo chamador que recebe as informações solicitadas sobre o conteúdo do diretório.

  • IrpSp->FileObject aponta para o objeto de arquivo associado a DeviceObject.

    O parâmetro IrpSp-FileObject> contém um ponteiro para o campo RelatedFileObject, que também é uma estrutura FILE_OBJECT. O campo RelatedFileObject da estrutura FILE_OBJECT não é válido durante o processamento de IRP_MJ_DIRECTORY_CONTROL e não deve ser usado.

  • IrpSp->Os sinalizadores podem ser definidos como um ou mais dos valores a seguir para IRP_MN_QUERY_DIRECTORY.

Sinalizador Significado
SL_INDEX_SPECIFIED Inicie a verificação na entrada no diretório cujo índice é fornecido por IrpSp-Parameters.QueryDirectory.FileIndex>.
SL_RESTART_SCAN Inicie a verificação na primeira entrada no diretório. Se esse sinalizador não estiver definido, retome a verificação de uma solicitação de IRP_MN_QUERY_DIRECTORY anterior.
SL_RETURN_SINGLE_ENTRY Retornar somente a primeira entrada encontrada.
SL_RETURN_ON_DISK_ENTRIES_ONLY Instrui todos os filtros que executam a virtualização de diretório ou a expansão just-in-time para simplesmente passar a solicitação para o sistema de arquivos e retornar entradas que estão atualmente no disco.

O seguinte sinalizador pode ser definido para IRP_MN_NOTIFY_CHANGE_DIRECTORY:

Sinalizador Significado
SL_WATCH_TREE Defina como TRUE se todos os subdiretórios desse diretório também devem ser observados. Defina como FALSE se apenas o próprio diretório deve ser observado.
  • IrpSp->MajorFunction está definido como IRP_MJ_DIRECTORY_CONTROL.

  • IrpSp->MinorFunction pode ser definido como um dos valores a seguir.

    • IRP_MN_QUERY_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX
  • IrpSp->Parameters.QueryDirectory.FileIndex é o índice do arquivo no qual iniciar a verificação de diretório. Esse valor será ignorado se o sinalizador SL_INDEX_SPECIFIED não estiver definido. Esse parâmetro não pode ser especificado em nenhuma função win32 ou rotina de suporte do modo kernel. Atualmente, ele é usado apenas pela máquina virtual NT DOS (NTVDM), que existe apenas em plataformas baseadas em NT de 32 bits. O índice de arquivo é indefinido para sistemas de arquivos, como o NTFS, no qual a posição de um arquivo dentro do diretório pai não é fixa e pode ser alterada a qualquer momento para manter a ordem de classificação.

  • IrpSp->Parameters.QueryDirectory.FileInformationClass é definido como um dos valores a seguir.

    Valor Significado
    FileBothDirectoryInformation Retornar uma estrutura de FILE_BOTH_DIR_INFORMATION para cada arquivo.
    FileDirectoryInformation Retornar uma estrutura de FILE_DIRECTORY_INFORMATION para cada arquivo.
    FileFullDirectoryInformation Retornar uma estrutura de FILE_FULL_DIR_INFORMATION" para cada arquivo.
    FileIdBothDirectoryInformation Retornar uma estrutura FILE_ID_BOTH_DIR_INFORMATION para cada arquivo.
    FileIdFullDirectoryInformation Retornar uma estrutura de FILE_ID_FULL_DIR_INFORMATION para cada arquivo.
    FileNamesInformation Retornar uma estrutura de FILE_NAMES_INFORMATION para cada arquivo.
    FileObjectIdInformation Retornar uma estrutura de FILE_OBJECTID_INFORMATION para cada arquivo.
    FileQuotaInformation Obsoleto. Em vez disso , use IRP_MJ_QUERY_QUOTA .
    FileReparsePointInformation Retornar uma única estrutura de FILE_REPARSE_POINT_INFORMATION para o diretório.
  • IrpSp->Parameters.QueryDirectory.FileName é o nome opcional de um arquivo dentro do diretório especificado.

  • IrpSp->Parameters.QueryDirectory.Length é o comprimento em bytes do buffer apontado por Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectory.Length é o comprimento em bytes do buffer apontado por Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectory.CompletionFilter: para obter mais informações, consulte a descrição do parâmetro CompletionFilter para FsRtlNotifyFullChangeDirectory.

  • IrpSp->Parameters.NotifyDirectoryEx.Length é o comprimento em bytes do buffer apontado por Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectoryEx.CompletionFilter: para obter mais informações, consulte a descrição do parâmetro CompletionFilter para FsRtlNotifyFullChangeDirectory.

  • IrpSp->Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass é um dos valores a seguir.

    Valor Significado
    DirectoryNotifyInformation Retornar uma estrutura de FILE_NOTIFY_INFORMATION para alteração de diretório.
    DirectoryNotifyExtendedInformation Retornar uma estrutura FILE_NOTIFY_EXTENDED_INFORMATION para cada alteração de diretório.
    DirectoryNotifyFullInformation Retornar uma estrutura de FILE_NOTIFY_FULL_INFORMATION para cada alteração de diretório.

Confira também

FILE_BOTH_DIR_INFORMATION

FILE_DIRECTORY_INFORMATION

FILE_FULL_DIR_INFORMATION

FILE_ID_BOTH_DIR_INFORMATION

FILE_ID_FULL_DIR_INFORMATION

FILE_NAMES_INFORMATION

FILE_OBJECTID_INFORMATION

FILE_REPARSE_POINT_INFORMATION

FsRtlNotifyFullChangeDirectory

FILE_NOTIFY_INFORMATION

FILE_NOTIFY_EXTENDED_INFORMATION

FILE_NOTIFY_FULL_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_QUOTA

ZwQueryDirectoryFile

ZwQueryDirectoryFileEx