IRP_MJ_SET_INFORMATION (FS およびフィルター ドライバー)
送信時
I/O マネージャー、他のオペレーティング システム コンポーネント、および他のカーネル モード ドライバーは、IRP_MJ_SET_INFORMATION 要求を送信します。 たとえば、ユーザー モード アプリケーションが SetEndOfFile などの Win32 関数を呼び出したときや、カーネル モード コンポーネントが ZwSetInformationFile を呼び出したときに送信できます。
操作: ファイル システム ドライバー
ファイル システム ドライバーは、ファイル オブジェクトを抽出およびデコードして、それが開いているユーザー ファイルを表すかディレクトリを表すかを判断する必要があります。 存在する場合、ファイル システム ドライバーは要求を適切に処理し、IRP を完了する必要があります。
ファイルには以下の情報およびディレクトリを設定できます。
- FileBasicInformation
- FileDispositionInformation
- FileLinkInformation (ディレクトリ階層内にサイクルを作成できるファイル システム用)
- FilePositionInformation
- FileRenameInformation
次の種類の情報はファイルにのみ設定できます。
- FileAllocationInformation
- FileEndOfFileInformation
- FileLinkInformation: ディレクトリ階層内でサイクルを作成できないファイル システム (NTFS など) の場合
- FileValidDataLengthInformation
操作: レガシー ファイル システム フィルター ドライバー
フィルター ドライバーは、この IRP をスタック上の 1 つ下のドライバーに渡す必要があります。
パラメーター
ファイル システムまたはフィルター ドライバーは、指定された IRP で IoGetCurrentIrpStackLocation を呼び出して、IRP 内の独自のスタックの場所へのポインターを取得します。 次のパラメーターでは、Irp は IRP を指し、IrpSp は IO_STACK_LOCATION を指します。 ドライバーは、IRP の次のメンバーと IRP スタックの場所に設定されている情報を使用して、ファイル情報の設定要求を処理できます。
DeviceObject ターゲット デバイス オブジェクトへのポインターです。
Irp->AssociatedIrp.SystemBuffer は、設定するファイルまたはディレクトリ情報を含む入力バッファーを指します。 この情報は、次のいずれかの構造に保存されます。
Irp->Ioステータス は、最終的な完了ステータスと要求された操作に関する情報を受け取る IO_STATUS_BLOCK構造体を指します。 詳細については、「IoStatusBlock パラメーター ZwSetInformationFile」の説明を参照してください。
IrpSp->FileObject は、DeviceObject に関連付けられているファイル オブジェクトを指します。 このパラメータには、RelatedFileObject フィールド。これも FILE_OBJECT 構造体です。 RelatedFileObject FILE_OBJECT 構造体のフィールドは、IRP_MJ_SET_INFORMATION の処理中は無効であるため、使用しないでください。
IrpSp->MajorFunction* は IRP_MJ_SET_INFORMATION に設定されます。
IrpSp->MinorFunction* の場合は IRP_MN_KERNEL_CALL になる可能性があります Irp->Parameters.SetFile.FileInformationClass はFileValidDataLengthInformation. このコードは、要求のソースが信頼できるカーネル コンポーネントであることを示し、ドライバーがセキュリティ チェックをバイパスできるようにします。
IrpSp->Parameters.SetFile.AdvanceOnly ファイルの終わり操作のフラグです。 このフラグは、FileInformationClass が FileEndOfFileInformation の場合に、EndOfFile メンバー FILE_END_OF_FILE_INFORMATION 構造体の使用を決定します。 TRUE の場合、現在の有効なデータ長が増加した場合にのみ、ファイルの新しい有効なデータ長さが EndOfFile から設定されます。 もし 偽なら、新しいファイル サイズは次から設定されます。EndOfFile.
IrpSp->Parameters.SetFile.ClusterCountシステム使用のために予約されています。
IrpSp->Parameters.SetFile.DeleteHandle システム使用のために予約されています。
IrpSp->Parameters.SetFile.FileInformationClass ファイルに設定する情報の種類を示し、次のいずれかの値を指定できます。
Value 意味 FileAllocationInformation ファイルに FILE_ALLOCATION_INFORMATION を設定します。 FileBasicInformation ファイルに FILE_BASIC_INFORMATION を設定します。 FileDispositionInformation ファイルに FILE_DISPOSITION_INFORMATION を設定します。 FileEndOfFileInformation ファイルに FILE_END_OF_FILE_INFORMATION を設定します。 FileLinkInformation ファイルに FILE_LINK_INFORMATION を設定します。 FilePositionInformation ファイルに FILE_POSITION_INFORMATION を設定します。 FileRenameInformation ファイルに FILE_RENAME_INFORMATION を設定します。 FileValidDataLengthInformation ファイルに FILE_VALID_DATA_LENGTH_INFORMATION を設定します。 詳細については、「」を参照してください。Irp->MinorFunction. IrpSp->Parameters.SetFile.FileObject 名前変更またはリンク操作用です。 Irp->AssociatedIrp.SystemBuffer->FileName に完全修飾ファイル名が含まれている場合、または Irp->AssociatedIrp.SystemBuffer->RootDirectory が NULL 以外の場合、このメンバーは、操作のターゲットであるファイルの親ディレクトリのファイル オブジェクト ポインターです。 そうでなければ、それはNULL.
IrpSp->Parameters.SetFile.Length は、Irp->AssociatedIrp.SystemBuffer が指すバッファーの長さ (バイト単位) です。
IrpSp->Parameters.SetFile.ReplaceIfExists is set to TRUE同じ名前のファイルがすでに存在する場合に、指定されたファイルに置き換える必要があることを指定します。 FALSE に設定すると、指定した名前のファイルが既に存在する場合に名前変更操作が失敗します。
解説
AdvanceOnly メンバーはに設定されています 真 キャッシュ マネージャーによって、ディスク上の現在の有効なデータ長をEndOfFile 内の新しい有効なデータ長に進めるようにファイル システムに通知します。 もし AdvanceOnly が、偽、新しいファイル サイズ、EndOfFile 数は、現在のファイル サイズより大きくても小さくても設定されています。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示