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를 스택의 다음 하위 드라이버로 전달해야 합니다.

매개 변수

파일 시스템 또는 필터 드라이버는 지정된 IRP에 대해 IoGetCurrentIrpStackLocation 을 호출하여 IRP의 자체 스택 위치에 대한 포인터를 가져옵니다. 다음 매개 변수에서 IrpIRP 를 가리키고 IrpSpIO_STACK_LOCATION 가리킵니다. 드라이버는 IRP 및 IRP 스택 위치의 다음 멤버에 설정된 정보를 사용하여 설정된 파일 정보 요청을 처리할 수 있습니다.

  • DeviceObject 는 대상 디바이스 개체에 대한 포인터입니다.

  • Irp->ASSOCIATedIrp.SystemBuffer는 설정할 파일 또는 디렉터리 정보가 포함된 입력 버퍼를 가리킵니다. 이 정보는 다음 구조 중 하나에 저장됩니다.

  • Irp->IoStatus는 최종 완료 상태 수신하는 IO_STATUS_BLOCK 구조와 요청된 작업에 대한 정보를 가리킵니다. 자세한 내용은 ZwSetInformationFile에 대한 IoStatusBlock 매개 변수에 대한 설명을 참조하세요.

  • IrpSp->FileObjectDeviceObject와 연결된 파일 개체를 가리킵니다. 이 매개 변수에는 FILE_OBJECT 구조인 RelatedFileObject 필드에 대한 포인터가 포함되어 있습니다. FILE_OBJECT 구조체의 RelatedFileObject 필드는 IRP_MJ_SET_INFORMATION 처리하는 동안 유효하지 않으므로 사용하면 안 됩니다.

  • IrpSp->MajorFunction*은 IRP_MJ_SET_INFORMATION 설정됩니다.

  • IrpSp->Irp-Parameters.SetFile.FileInformationClass>FileValidDataLengthInformation인 경우 MinorFunction*을 IRP_MN_KERNEL_CALL 수 있습니다. 이 코드는 요청의 원본이 신뢰할 수 있는 커널 구성 요소임을 나타내며, 드라이버가 보안 검사를 무시할 수 있습니다.

  • IrpSp->Parameters.SetFile.AdvanceOnly 는 파일 끝 작업의 플래그입니다. 이 플래그는 FileInformationClassFileEndOfFileInformation인 경우 EndOfFile 멤버 FILE_END_OF_FILE_INFORMATION 구조체의 사용을 결정합니다. TRUE이면 파일의 유효한 새 데이터 길이가 현재 유효한 데이터 길이를 늘리는 경우에만 EndOfFile에서 설정됩니다. FALSE이면 EndOfFile에서 새 파일 크기가 설정됩니다.

  • IrpSp->Parameters.SetFile.ClusterCount 는 시스템 사용을 위해 예약되어 있습니다.

  • IrpSp->Parameters.SetFile.DeleteHandle 은 시스템 사용을 위해 예약되어 있습니다.

  • IrpSp->Parameters.SetFile.FileInformationClass 는 파일에 대해 설정할 정보 유형을 나타내며 다음 값 중 하나일 수 있습니다.

    의미
    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.LengthIrp-AssociatedIrp.SystemBuffer가 가리키는 버퍼의 길이(바이트)>입니다.

  • IrpSp->Parameters.SetFile.ReplaceIfExistsTRUE 로 설정되어 이름이 같은 파일이 이미 있는 경우 지정된 파일로 바꿔야 합니다. 지정된 이름의 파일이 이미 있는 경우 이름 바꾸기 작업이 실패하는 경우 FALSE 로 설정합니다.

설명

AdvanceOnly 멤버는 캐시 관리자가 디스크의 현재 유효한 데이터 길이를 EndOfFile의 새 유효한 데이터 길이로 진행하도록 파일 시스템에 알리기 위해 TRUE로 설정됩니다. AdvanceOnlyFALSE이면 EndOfFile 멤버에서 현재 파일 크기보다 크거나 작을 수 있는 새 파일 크기가 설정됩니다.

추가 정보

FILE_ALLOCATION_INFORMATION

FILE_BASIC_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_LINK_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_INFORMATION

ZwSetInformationFile