Compartilhar via


IRP_MJ_QUERY_QUOTA (FS e drivers de filtro)

Quando enviado

O Gerenciador de E/S envia a solicitação de IRP_MJ_QUERY_QUOTA. Essa solicitação pode ser enviada, por exemplo, quando um aplicativo de modo de usuário tiver chamado um método Win32, como IDiskQuotaControl::GetQuotaState.

Operação: Drivers do sistema de arquivos

Se o sistema de arquivos der suporte a cotas de disco, o driver do sistema de arquivos deverá extrair e decodificar o objeto de arquivo para determinar se ele representa um usuário aberto de um arquivo ou diretório. Se isso acontecer, o driver deverá processar a consulta e concluir o IRP. Caso contrário, o driver deverá concluir o IRP conforme apropriado sem processar a consulta.

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

O driver de filtro deve passar esse IRP para o driver mais baixo na pilha, a menos que precise substituir explicitamente o comportamento de cota.

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 cota de consulta:

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

  • DeviceObject->Sinalizadores: os sinalizadores DO_BUFFERED_IO e DO_DIRECT_IO são usados da seguinte maneira para especificar o método pelo qual os dados são passados para o driver:

    Configuração do sinalizador Método de E/S
    ~DO_BUFFERED_IO ~DO_DIRECT_IO
    METHOD_NEITHER ~DO_BUFFERED_IO
    DO_DIRECT_IO METHOD_DIRECT
    DO_BUFFERED_IO ~DO_DIRECT_IO
    METHOD_BUFFERED DO_BUFFERED_IO
    DO_DIRECT_IO METHOD_BUFFERED
  • Irp->AssociatedIrp.SystemBuffer aponta para um buffer fornecido pelo sistema a ser usado como um buffer de sistema intermediário, se o sinalizador DO_BUFFERED_IO estiver definido em DeviceObject-Flags>. Caso contrário, esse membro será definido como NULL.

  • 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.

  • *Irp->UserBuffer aponta para um buffer de saída estruturado FILE_QUOTA_INFORMATION fornecido pelo chamador que recebe as informações de cota para o volume.

  • 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_QUERY_QUOTA e não deve ser usado.

  • IrpSp->Os sinalizadores podem ser um ou mais dos seguintes valores:

Sinalizador Significado
SL_INDEX_SPECIFIED Inicie a verificação na entrada na lista de cotas cujo índice é fornecido por IrpSp-Parameters.QueryQuota.StartSid>
SL_RESTART_SCAN Inicie a verificação na primeira entrada da lista. Se esse sinalizador não estiver definido, retome a verificação de uma solicitação de IRP_MJ_QUERY_QUOTA anterior.
SL_RETURN_SINGLE_ENTRY Retornar somente a primeira entrada encontrada.
  • IrpSp->MajorFunction é definido como IRP_MJ_QUERY_QUOTA.

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

  • IrpSp->Parameters.QueryQuota.SidList é um ponteiro opcional para uma lista de SIDs cujas informações de cota devem ser retornadas. Cada entrada na lista é uma estrutura FILE_GET_QUOTA_INFORMATION . Essa estrutura é definida da seguinte maneira:

    typedef struct _FILE_GET_QUOTA_INFORMATION {
        ULONG NextEntryOffset;
        ULONG SidLength;
        SID Sid;
    } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
    
Membro Significado
NextEntryOffset Deslocamento de bytes da próxima entrada FILE_GET_QUOTA_INFORMATION, se várias entradas estiverem presentes em um buffer. Esse membro será zero se nenhuma outra entrada seguir esta.
SidLength Comprimento, em bytes, do membro Sid .
Sid SID (identificador de segurança)
  • IrpSp->Parameters.QueryQuota.SidListLength é o comprimento, em bytes, da lista de SIDs, se um for especificado.

  • IrpSp->Parameters.QueryQuota.StartSid é um ponteiro opcional para um SID que indica que as informações retornadas serão iniciadas com uma entrada diferente da primeira. Esse parâmetro será ignorado se uma lista de SID for especificada.

Confira também

FILE_GET_QUOTA_INFORMATION

FILE_QUOTA_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckQuotaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_QUOTA