IRP_MJ_SET_INFORMATION (FS e drivers de filtro)

Quando enviado

O Gerenciador de E/S, outros componentes do sistema operacional e outros drivers de modo kernel enviam a solicitação de IRP_MJ_SET_INFORMATION. Ele pode ser enviado, por exemplo, quando um aplicativo de modo de usuário tiver chamado uma função Win32 como SetEndOfFile ou quando um componente do modo kernel tiver chamado ZwSetInformationFile.

Operação: Drivers do sistema de arquivos

O driver do sistema de arquivos deve extrair e decodificar o objeto de arquivo para determinar se ele representa um arquivo de usuário ou diretório aberto. Se isso acontecer, o driver do sistema de arquivos deverá processar a solicitação conforme apropriado e concluir o IRP.

Os seguintes tipos de informações podem ser definidos em arquivos e diretórios:

  • FileBasicInformation
  • FileDispositionInformation
  • FileLinkInformation (para sistemas de arquivos que permitem a criação de ciclos na hierarquia de diretórios)
  • FilePositionInformation
  • FileRenameInformation

Os seguintes tipos de informações podem ser definidos somente em arquivos:

  • FileAllocationInformation
  • FileEndOfFileInformation
  • FileLinkInformation: para sistemas de arquivos (por exemplo, NTFS) que não permitem que ciclos sejam criados na hierarquia de diretórios
  • FileValidDataLengthInformation

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 informações de arquivo definida:

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

  • Irp->AssociatedIrp.SystemBuffer aponta para um buffer de entrada que contém as informações de arquivo ou diretório a serem definidas. Essas informações são armazenadas em uma das seguintes estruturas:

  • Irp->IoStatus aponta para uma estrutura IO_STATUS_BLOCK que recebe a status de conclusão final e informações sobre a operação solicitada. Para obter mais informações, consulte a descrição do parâmetro IoStatusBlock para ZwSetInformationFile.

  • IrpSp->FileObject aponta para o objeto de arquivo associado a DeviceObject. Esse parâmetro 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_SET_INFORMATION e não deve ser usado.

  • IrpSp->MajorFunction* é definido como IRP_MJ_SET_INFORMATION.

  • IrpSp->MinorFunction* pode ser IRP_MN_KERNEL_CALL quando Irp-Parameters.SetFile.FileInformationClass> for FileValidDataLengthInformation. Esse código indica que a origem da solicitação é um componente de kernel confiável, permitindo que os drivers ignorem as verificações de segurança.

  • IrpSp->Parameters.SetFile.AdvanceOnly é um sinalizador para operações de fim de arquivo. Esse sinalizador determina o uso do membro EndOfFileFILE_END_OF_FILE_INFORMATION estrutura quando FileInformationClass é FileEndOfFileInformation. Se TRUE, um novo comprimento de dados válido para o arquivo será definido a partir de EndOfFile somente se ele aumentar o comprimento de dados válido atual. Se FALSE, um novo tamanho de arquivo será definido de EndOfFile.

  • IrpSp->Parameters.SetFile.ClusterCount é reservado para uso do sistema.

  • IrpSp->Parameters.SetFile.DeleteHandle é reservado para uso do sistema.

  • IrpSp->Parameters.SetFile.FileInformationClass indica o tipo de informação a ser definido para o arquivo e pode ser um dos valores a seguir.

    Valor Significado
    FileAllocationInformation Defina FILE_ALLOCATION_INFORMATION para o arquivo.
    FileBasicInformation Defina FILE_BASIC_INFORMATION para o arquivo.
    FileDispositionInformation Defina FILE_DISPOSITION_INFORMATION para o arquivo.
    FileEndOfFileInformation Defina FILE_END_OF_FILE_INFORMATION para o arquivo.
    FileLinkInformation Defina FILE_LINK_INFORMATION para o arquivo.
    FilePositionInformation Defina FILE_POSITION_INFORMATION para o arquivo.
    FileRenameInformation Defina FILE_RENAME_INFORMATION para o arquivo.
    FileValidDataLengthInformation Defina FILE_VALID_DATA_LENGTH_INFORMATION para o arquivo. Para obter mais informações, consulte Irp-MinorFunction>.
  • IrpSp->Parameters.SetFile.FileObject é para operações de renomeação ou link. Se Irp-AssociatedIrp.SystemBuffer-FileName>> contiver um nome de arquivo totalmente qualificado ou se Irp-AssociatedIrp.SystemBuffer-RootDirectory>> for não NULL, esse membro será um ponteiro de objeto de arquivo para o diretório pai do arquivo que é o destino da operação. Caso contrário, será NULL.

  • IrpSp->Parameters.SetFile.Length é o comprimento, em bytes, do buffer apontado por Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.SetFile.ReplaceIfExists é definido como TRUE para especificar que, se já existir um arquivo com o mesmo nome, ele deverá ser substituído pelo arquivo fornecido. Defina como FALSE se a operação de renomeação falhar se já existir um arquivo com o nome fornecido.

Comentários

O membro AdvanceOnly é definido como TRUE pelo gerenciador de cache para notificar o sistema de arquivos para avançar o comprimento de dados válido atual no disco para o novo comprimento de dados válido em EndOfFile. Se AdvanceOnly for FALSE, um novo tamanho de arquivo, no membro EndOfFile , está sendo definido que pode ser maior ou menor que o tamanho do arquivo atual.

Confira também

FILE_ALLOCATION_INFORMATION

FILE_BASIC_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_LINK_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_INFORMATION

ZwSetInformationFile