IRP_MJ_SET_INFORMATION(IFS)
보낸 경우
IRP_MJ_SET_INFORMATION 요청은 I/O 관리자 및 기타 운영 체제 구성 요소뿐만 아니라 다른 커널 모드 드라이버에서도 전송됩니다. 예를 들어 사용자 모드 애플리케이션이 SetEndOfFile 과 같은 Microsoft Win32 함수를 호출했거나 커널 모드 구성 요소가 ZwSetInformationFile을 호출한 경우 전송할 수 있습니다.
작업: 파일 시스템 드라이버
파일 시스템 드라이버는 파일 개체를 추출하고 디코딩하여 열려 있는 사용자 파일 또는 디렉터리를 나타내는지 여부를 확인해야 합니다. 이 경우 파일 시스템 드라이버는 요청을 적절하게 처리하고 IRP를 완료해야 합니다.
파일 및 디렉터리에 다음 유형의 정보를 설정할 수 있습니다.
- FileBasicInformation
- FileDispositionInformation
- FileLinkInformation(디렉터리 계층 구조에서 주기를 만들 수 있는 파일 시스템의 경우)
- FilePositionInformation
- FileRenameInformation
다음 유형의 정보는 파일에서만 설정할 수 있습니다.
- FileAllocationInformation
- FileEndOfFileInformation
- FileLinkInformation(디렉터리 계층 구조에서 주기를 만들 수 없는 NTFS와 같은 파일 시스템의 경우)
- FileValidDataLengthInformation
작업: 파일 시스템 필터 드라이버
필터 드라이버는 이 IRP를 스택의 다음 하위 드라이버로 전달해야 합니다.
매개 변수
파일 시스템 또는 필터 드라이버는 지정된 IRP를 사용하여 IoGetCurrentIrpStackLocation 을 호출하여 IRP의 자체 스택 위치에 대한 포인터를 가져옵니다. 이 포인터는 다음 목록에 IrpSp로 표시됩니다. (IRP는 Irp로 표시됩니다.) 드라이버는 설정된 파일 정보 요청을 처리하는 데 IRP 및 IRP 스택 위치의 다음 멤버에 설정된 정보를 사용할 수 있습니다.
DeviceObject: 대상 디바이스 개체에 대한 포인터입니다.
Irp-> ASSOCIATedIrp.SystemBuffer: 설정할 파일 또는 디렉터리 정보를 포함하는 입력 버퍼에 대한 포인터입니다. 이 정보는 다음 구조 중 하나에 저장됩니다.
- 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
Irp-> IoStatus: 요청된 작업에 대한 최종 완료 상태 및 정보를 수신하는 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. 자세한 내용은 ZwSetInformationFile에 대한 IoStatusBlock 매개 변수에 대한 설명을 참조하세요.
IrpSp-> FileObject: DeviceObject와 연결된 파일 개체에 대한 포인터입니다. 이 매개 변수는 FILE_OBJECT 구조인 RelatedFileObject 필드에 대한 포인터를 포함합니다. FILE_OBJECT 구조체의 RelatedFileObject 필드는 IRP_MJ_SET_INFORMATION 처리하는 동안 유효하지 않으므로 사용하면 안 됩니다.
IrpSp-> MajorFunction: IRP_MJ_SET_INFORMATION 설정합니다.
IrpSp-> MinorFunction: Irp-Parameters.SetFile.FileInformationClass>가 FileValidDataLengthInformation인 경우 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.Length: Irp-AssociatedIrp.SystemBuffer가 가리키는 버퍼의 길이(바이트)>입니다.
IrpSp-> Parameters.SetFile.ReplaceIfExists: TRUE 로 설정하여 이름이 같은 파일이 이미 있는 경우 지정된 파일로 바꿔야 한다고 지정합니다. 지정된 이름의 파일이 이미 있는 경우 이름 바꾸기 작업이 실패하는 경우 FALSE 로 설정합니다.
설명
AdvanceOnly 멤버는 디스크의 현재 유효한 데이터 길이를 EndOfFile의 새 유효한 데이터 길이로 진행하도록 파일 시스템에 알리기 위해 캐시 관리자에 의해 TRUE로 설정됩니다. AdvanceOnly가 FALSE이면 EndOfFile 멤버의 새 파일 크기가 설정되고 현재 파일 크기보다 크거나 작을 수 있습니다.