IRP_MJ_QUERY_QUOTA (FS およびフィルター ドライバー)

送信時

I/O マネージャーは IRP_MJ_QUERY_QUOTA リクエストを送信します。 このリクエストは、たとえばユーザーモード アプリケーションが次のような Win32 メソッドを呼び出したときに送信できます。IDiskQuotaControl::GetQuotaState.

操作: ファイル システム ドライバー

ファイル システムがディスク クォータをサポートしている場合、ファイル システム ドライバーはファイル オブジェクトを抽出してデコードし、それがユーザーによるファイルまたはディレクトリのオープンを表すかどうかを判断する必要があります。 存在する場合、ドライバーはクエリを処理し、IRP を完了する必要があります。 それ以外の場合、ドライバーはクエリを処理せずに、必要に応じて IRP を完了する必要があります。

操作: レガシー ファイル システム フィルター ドライバー

フィルター ドライバーは、クォータ動作を明示的にオーバーライドする必要がない限り、この IRP をスタック上の次に下位のドライバーに渡す必要があります。

パラメーター

ファイル システムまたはフィルター ドライバーは、指定された IRP で IoGetCurrentIrpStackLocation を呼び出して、IRP 内の独自のスタックの場所へのポインターを取得します。 次のパラメーターでは、IrpIRP を指し、IrpSpIO_STACK_LOCATION を指します。 ドライバーは、IRP の次のメンバーと IRP スタックの場所に設定されている情報を使用して、クエリ クォータ情報要求を処理できます。

  • DeviceObject ターゲット デバイス オブジェクトへのポインターです。

  • DeviceObject->フラグ: TDO_BUFFERED_IO フラグと DO_DIRECT_IO フラグは、データをドライバーに渡す方法を指定するために次のように使用されます。

    フラグ設定 I/O Method
    ~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->Ioステータス は、最終的な完了ステータスと要求された操作に関する情報を受け取る IO_STATUS_BLOCK構造体を指します。

  • *Irp->UserBuffer ボリュームのクォータ情報を受け取る、呼び出し元が提供する FILE_QUOTA_INFORMATION 構造の出力バッファーを指します。

  • IrpSp->FileObject は、DeviceObject に関連付けられているファイル オブジェクトを指します。

    IrpSp->FileObject パラメーターには、FILE_OBJECT構造体でもある RelatedFileObject フィールドへのポインターが含まれています。 RelatedFileObject FILE_OBJECT 構造体のフィールドは、IRP_MJ_QUERY_QUOTA の処理中は無効なので、使用しないでください。

  • IrpSp->フラグ 次の 1 つ以上の値を指定できます。

フラグ 意味
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クォータ情報が返される SID のリストへのオプションのポインタです。 リスト内の各エントリは、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 エントリのバイト オフセット。 このメンバーに続く他のエントリがない場合、このメンバーは 0 です。
SidLength バイト単位の長さ Sid メンバー。
Sid セキュリティ識別子 (SID)
  • IrpSp->Parameters.QueryQuota.SidListLength SID が指定されている場合、SID のリストの長さ (バイト単位) です。

  • IrpSp->Parameters.QueryQuota.StartSid 返される情報が最初以外のエントリで始まることを示す SID へのオプションのポインタです。 SID リストが指定されている場合、このパラメーターは無視されます。

関連項目

FILE_GET_QUOTA_INFORMATION

FILE_QUOTA_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckQuotaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_QUOTA