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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de