IRP_MJ_QUERY_QUOTA (controladores de filtro y FS)

Cuándo se envió

El Administrador de E/S envía la solicitud de IRP_MJ_QUERY_QUOTA. Esta solicitud se puede enviar, por ejemplo, cuando una aplicación en modo de usuario ha llamado a un método Win32, como IDiskQuotaControl::GetQuotaState.

Operación: controladores del sistema de archivos

Si el sistema de archivos admite cuotas de disco, el controlador del sistema de archivos debe extraer y descodificar el objeto de archivo para determinar si representa a un usuario abierto de un archivo o directorio. Si es así, el controlador debe procesar la consulta y completar el IRP. De lo contrario, el controlador debe completar el IRP según corresponda sin procesar la consulta.

Operación: controladores de filtro del sistema de archivos heredados

El controlador de filtro debe pasar este IRP al siguiente controlador inferior de la pila, a menos que tenga que invalidar explícitamente el comportamiento de la cuota.

Parámetros

Un controlador de filtro o sistema de archivos llama a IoGetCurrentIrpStackLocation para que el IRP determinado obtenga un puntero a su propia ubicación de pila en el IRP. En los parámetros siguientes, Irp apunta al IRP e IrpSp apunta al IO_STACK_LOCATION. El controlador puede usar la información establecida en los siguientes miembros del IRP y la ubicación de la pila irP para procesar una solicitud de información de cuota de consulta:

  • DeviceObject es un puntero al objeto de dispositivo de destino.

  • DeviceObject:>Marcas: las marcas DO_BUFFERED_IO y DO_DIRECT_IO se usan de la siguiente manera para especificar el método por el que se pasan los datos al controlador:

    Configuración de marca 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 apunta a un búfer proporcionado por el sistema que se usará como búfer intermedio del sistema, si la marca de DO_BUFFERED_IO está establecida en DeviceObject-Flags>. De lo contrario, este miembro se establece en NULL.

  • Irp->IoStatus apunta a una estructura de IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación solicitada.

  • *Irp->UserBuffer apunta a un búfer de salida estructurado FILE_QUOTA_INFORMATION proporcionado por el autor de la llamada que recibe la información de cuota del volumen.

  • IrpSp->FileObject apunta al objeto de archivo asociado a DeviceObject.

    El parámetro IrpSp-FileObject> contiene un puntero al campo RelatedFileObject, que también es una estructura de FILE_OBJECT. El campo RelatedFileObject de la estructura FILE_OBJECT no es válido durante el procesamiento de IRP_MJ_QUERY_QUOTA y no se debe usar.

  • IrpSp->Las marcas pueden ser uno o varios de los valores siguientes:

Marca Significado
SL_INDEX_SPECIFIED Comience el examen en la entrada de la lista de cuotas cuyo índice da IrpSp-Parameters.QueryQuota.StartSid>.
SL_RESTART_SCAN Inicie el examen en la primera entrada de la lista. Si no se establece esta marca, reanude el examen de una solicitud de IRP_MJ_QUERY_QUOTA anterior.
SL_RETURN_SINGLE_ENTRY Devuelve solo la primera entrada que se encuentra.
  • IrpSp->MajorFunction se establece en IRP_MJ_QUERY_QUOTA.

  • IrpSp->Parameters.QueryQuota.Length es la longitud, en bytes, del búfer al que apunta Irp-UserBuffer>.

  • IrpSp->Parameters.QueryQuota.SidList es un puntero opcional a una lista de SID cuya información de cuota se va a devolver. Cada entrada de la lista es una estructura FILE_GET_QUOTA_INFORMATION . Esta estructura se define de la siguiente manera:

    typedef struct _FILE_GET_QUOTA_INFORMATION {
        ULONG NextEntryOffset;
        ULONG SidLength;
        SID Sid;
    } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
    
Miembro Significado
NextEntryOffset Desplazamiento de bytes de la siguiente entrada FILE_GET_QUOTA_INFORMATION, si hay varias entradas presentes en un búfer. Este miembro es cero si ninguna otra entrada sigue esta.
SidLength Longitud, en bytes, del miembro Sid .
Sid Identificador de seguridad (SID)
  • IrpSp->Parameters.QueryQuota.SidListLength es la longitud, en bytes, de la lista de SID, si se especifica una.

  • IrpSp->Parameters.QueryQuota.StartSid es un puntero opcional a un SID que indica que la información devuelta es comenzar con una entrada distinta de la primera. Este parámetro se omite si se especifica una lista de SID.

Consulte también

FILE_GET_QUOTA_INFORMATION

FILE_QUOTA_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckQuotaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_QUOTA