IRP_MJ_QUERY_QUOTA (FS и драйверы фильтров)

При отправке

Диспетчер ввода-вывода отправляет запрос IRP_MJ_QUERY_QUOTA. Этот запрос можно отправить, например, если приложение пользовательского режима вызывает метод Win32, например IDiskQuotaControl::GetQuotaState.

Операция: драйверы файловой системы

Если файловая система поддерживает дисковые квоты, драйвер файловой системы должен извлечь и декодировать объект файла, чтобы определить, представляет ли он пользователя, открытого для файла или каталога. Если это так, драйвер должен обработать запрос и завершить IRP. В противном случае драйвер должен завершить IRP соответствующим образом, не обрабатывая запрос.

Операция: устаревшие драйверы фильтров файловой системы

Драйвер фильтра должен передать этот IRP в следующий драйвер в стеке, если ему не нужно явно переопределить поведение квоты.

Параметры

Драйвер файловой системы или фильтра вызывает IoGetCurrentIrpStackLocation для заданного IRP, чтобы получить указатель на собственное расположение стека в IRP. В следующих параметрах Irp указывает на IRP , а IrpSpна IO_STACK_LOCATION. Драйвер может использовать сведения, заданные в следующих элементах IRP и расположении стека IRP, для обработки запроса сведений о квоте:

  • DeviceObject — это указатель на целевой объект устройства.

  • DeviceObject->Флаги. Флаги DO_BUFFERED_IO и DO_DIRECT_IO используются следующим образом, чтобы указать метод, с помощью которого данные передаются в драйвер.

    Параметр флага Метод ввода-вывода
    ~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 указывает на предоставленный системой буфер, который будет использоваться в качестве промежуточного системного буфера, если флаг DO_BUFFERED_IO установлен в DeviceObject-Flags>. В противном случае этому элементу присваивается значение NULL.

  • Irp->IoStatus указывает на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции.

  • *Irp->UserBuffer указывает на предоставленный вызывающим FILE_QUOTA_INFORMATION структурированный выходной буфер, который получает сведения о квоте для тома.

  • IrpSp->FileObject указывает на объект файла, связанный с DeviceObject.

    Параметр IrpSp-FileObject> содержит указатель на поле RelatedFileObject, которое также является FILE_OBJECT структурой. Поле RelatedFileObject структуры FILE_OBJECT недопустимо во время обработки IRP_MJ_QUERY_QUOTA и не должно использоваться.

  • IrpSp->Флаги могут иметь одно или несколько из следующих значений:

Flag Значение
SL_INDEX_SPECIFIED Начните сканирование с записи в списке квот, индекс которой задан IrpSp-Parameters.QueryQuota.StartSid>
SL_RESTART_SCAN Начните сканирование с первой записи в списке. Если этот флаг не установлен, возобновите проверку из предыдущего запроса IRP_MJ_QUERY_QUOTA.
SL_RETURN_SINGLE_ENTRY Возвращает только первую найденную запись.
  • IrpSp->MajorFunction имеет значение IRP_MJ_QUERY_QUOTA.

  • IrpSp->Parameters.QueryQuota.Length — это длина (в байтах) буфера, на который указывает Irp-UserBuffer>.

  • IrpSp->Parameters.QueryQuota.SidList — это необязательный указатель на список идентификаторов безопасности, для которых необходимо вернуть сведения о квоте. Каждая запись в списке представляет собой FILE_GET_QUOTA_INFORMATION структуру. Эта структура определяется следующим образом:

    typedef struct _FILE_GET_QUOTA_INFORMATION {
        ULONG NextEntryOffset;
        ULONG SidLength;
        SID Sid;
    } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
    
Член Значение
NextEntryOffset Байтовое смещение следующей записи FILE_GET_QUOTA_INFORMATION, если в буфере присутствует несколько записей. Этот элемент равен нулю, если другие записи не следуют за этим элементом.
SidLength Длина элемента Sid в байтах.
Sid Идентификатор безопасности (SID)
  • IrpSp->Parameters.QueryQuota.SidListLength — это длина в байтах списка идентификаторов безопасности, если он указан.

  • IrpSp->Parameters.QueryQuota.StartSid — необязательный указатель на идентификатор безопасности, который указывает, что возвращаемые сведения должны начинаться с записи, отличной от первой. Этот параметр игнорируется, если указан список SID.

См. также раздел

FILE_GET_QUOTA_INFORMATION

FILE_QUOTA_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckQuotaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_QUOTA