IRP_MJ_QUERY_QUOTA (FS- und Filtertreiber)

Sendebedingungen

Der E/A-Manager sendet die IRP_MJ_QUERY_QUOTA Anforderung. Diese Anforderung kann beispielsweise gesendet werden, wenn eine Anwendung im Benutzermodus eine Win32-Methode wie IDiskQuotaControl::GetQuotaState aufgerufen hat.

Vorgang: Dateisystemtreiber

Wenn das Dateisystem Datenträgerkontingente unterstützt, sollte der Dateisystemtreiber das Dateiobjekt extrahieren und decodieren, um zu bestimmen, ob es einen Benutzer darstellt, der eine Datei oder ein Verzeichnis geöffnet hat. Wenn dies der Fall ist, sollte der Treiber die Abfrage verarbeiten und die IRP abschließen. Andernfalls sollte der Treiber die IRP nach Bedarf abschließen, ohne die Abfrage zu verarbeiten.

Vorgang: Legacy-Dateisystemfiltertreiber

Der Filtertreiber sollte diesen IRP an den nächstniedrigen Treiber im Stapel übergeben, es sei denn, er muss das Kontingentverhalten explizit überschreiben.

Parameter

Ein Dateisystem oder Filtertreiber ruft IoGetCurrentIrpStackLocation für den angegebenen IRP auf, um einen Zeiger auf den eigenen Stapelspeicherort im IRP zu erhalten. In den folgenden Parametern verweist Irp auf den IRP und IrpSp auf die IO_STACK_LOCATION. Der Treiber kann die Informationen, die in den folgenden Elementen des IRP und des IRP-Stapelspeicherorts festgelegt sind, verwenden, um eine Abfragekontingentinformationsanforderung zu verarbeiten:

  • DeviceObject ist ein Zeiger auf das Zielgerätobjekt.

  • DeviceObject:>Flags: Die flags DO_BUFFERED_IO und DO_DIRECT_IO werden wie folgt verwendet, um die Methode anzugeben, mit der Daten an den Treiber übergeben werden:

    Flag-Einstellung E/A-Methode
    ~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 verweist auf einen vom System bereitgestellten Puffer, der als Zwischensystempuffer verwendet werden soll, wenn das flag DO_BUFFERED_IO in DeviceObject-Flags> festgelegt ist. Andernfalls wird dieser Member auf NULL festgelegt.

  • Irp->IoStatus verweist auf eine IO_STATUS_BLOCK-Struktur, die den endgültigen Abschluss status und Informationen zum angeforderten Vorgang empfängt.

  • *Irp->UserBuffer verweist auf einen vom Aufrufer bereitgestellten FILE_QUOTA_INFORMATION strukturierten Ausgabepuffer, der die Kontingentinformationen für das Volume empfängt.

  • IrpSp->FileObject verweist auf das Dateiobjekt, das DeviceObject zugeordnet ist.

    Der Parameter IrpSp-FileObject> enthält einen Zeiger auf das RelatedFileObject-Feld, das auch eine FILE_OBJECT-Struktur ist. Das Feld RelatedFileObject der FILE_OBJECT-Struktur ist während der Verarbeitung von IRP_MJ_QUERY_QUOTA ungültig und sollte nicht verwendet werden.

  • IrpSp->Flags können mindestens einen der folgenden Werte aufweisen:

Flag Bedeutung
SL_INDEX_SPECIFIED Starten Sie die Überprüfung am Eintrag in der Kontingentliste, dessen Index von IrpSp-Parameters.QueryQuota.StartSid> angegeben wird.
SL_RESTART_SCAN Beginnen Sie die Überprüfung am ersten Eintrag in der Liste. Wenn dieses Flag nicht festgelegt ist, setzen Sie die Überprüfung aus einer vorherigen IRP_MJ_QUERY_QUOTA-Anforderung fort.
SL_RETURN_SINGLE_ENTRY Gibt nur den ersten gefundenen Eintrag zurück.
  • IrpSp->MajorFunction ist auf IRP_MJ_QUERY_QUOTA festgelegt.

  • IrpSp->Parameters.QueryQuota.Length ist die Länge des Puffers in Bytes, auf den Irp-UserBuffer> verweist.

  • IrpSp->Parameters.QueryQuota.SidList ist ein optionaler Zeiger auf eine Liste von SIDs, deren Kontingentinformationen zurückgegeben werden sollen. Jeder Eintrag in der Liste ist eine FILE_GET_QUOTA_INFORMATION Struktur. Diese Struktur ist wie folgt definiert:

    typedef struct _FILE_GET_QUOTA_INFORMATION {
        ULONG NextEntryOffset;
        ULONG SidLength;
        SID Sid;
    } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
    
Mitglied Bedeutung
NextEntryOffset Byteoffset des nächsten FILE_GET_QUOTA_INFORMATION Eintrags, wenn mehrere Einträge in einem Puffer vorhanden sind. Dieser Member ist 0(0), wenn keine weiteren Einträge auf diesen Folgen folgen.
SidLength Länge des Sid-Elements in Byte.
Sid Sicherheitsbezeichner (SID)
  • IrpSp->Parameters.QueryQuota.SidListLength ist die Länge der Liste der SIDs in Bytes, sofern angegeben.

  • IrpSp->Parameters.QueryQuota.StartSid ist ein optionaler Zeiger auf eine SID, der angibt, dass die zurückgegebenen Informationen mit einem anderen Eintrag als dem ersten beginnen sollen. Dieser Parameter wird ignoriert, wenn eine SID-Liste angegeben wird.

Weitere Informationen

FILE_GET_QUOTA_INFORMATION

FILE_QUOTA_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckQuotaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_QUOTA