IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL(ntifs.h)

볼륨 섀도 복사본이 발생하기 전에 파일 시스템의 플러시를 강제로 적용하기 위해 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES 제어 코드가 전송됩니다. 이 IOCTL은 로컬 파일 시스템의 볼륨 디바이스 개체 및 해당 볼륨에 연결되었을 수 있는 파일 시스템 필터 드라이버로만 전송되는 IRP_MJ_DEVICE_CONTROL 요청으로 발급됩니다. 이 IOCTL은 볼륨 섀도 복사본 서비스에서 가장 일반적으로 전송되지만 다른 사용자 모드 애플리케이션 또는 프로세스에서 발급할 수도 있습니다. 이 IOCTL이 최대 절전 모드 요청 중 또는 크래시 덤프 전에 볼륨 섀도 복사본 드라이버(volsnap.sys)에 의해 전송될 수도 있습니다. 이 IOCTL은 파일 시스템 아래에 있는 파일 시스템 필터 드라이버, 파일 시스템 드라이버 및 기타 디바이스 드라이버(예: 스토리지 필터 드라이버 및 스토리지 드라이버)로 전송됩니다.

NTFS와 같은 파일 시스템이 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES 받으면 파일 시스템은 볼륨을 디스크로 플러시하여 파일 시스템의 디스크 구조를 일관되고 최신 상태로 만들어야 합니다. 파일 시스템은 파일 시스템을 읽기 전용 탑재 가능 상태로 잠그고 캐시된 디스크 페이지가 더티 않도록 새 파일 시스템 변경을 차단해야 합니다. 파일 시스템이 이러한 상태로 파일 시스템을 배치한 후에는 아래 드라이버가 IRP를 완료할 때까지 파일 시스템을 읽기 전용 탑재 가능 상태로 계속 유지하면서 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL을 사용하여 IRP를 다음 드라이버로 전달해야 합니다. IRP가 완료되거나 취소되면 파일 시스템은 볼륨에서 I/O를 다시 사용하도록 설정하고 를 반환합니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

IrpSp->Parameters.DeviceIoControl.IoControlCode 는 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES 설정됩니다.

출력 버퍼

없음

상태 블록

Status 멤버는 성공 시 STATUS_SUCCESS 또는 다음 중 하나와 같은 적절한 NTSTATUS 값으로 설정됩니다.

STATUS_FILE_LOCK_CONFLICT

파일 잠금 충돌이 발생했습니다. 이 오류는 필터 관리자가 반환할 수 있습니다.

STATUS_VOLUME_DISMOUNTED

볼륨이 분리되었습니다.

설명

볼륨의 섀도 복사본은 해당 볼륨의 지정 시간 복사본입니다. 섀도 복사본은 백업 작업을 완료하는 동안 파일이 실제로 변경될 수 있더라도 일관된 방식으로 파일을 백업할 수 있도록 백업 애플리케이션에서 주로 사용됩니다. 섀도 복사본을 사용하여 PNP 요청으로 인한 최대 절전 모드 및 크래시 덤프에 대한 볼륨을 준비할 수도 있습니다.

Windows XP 이상 버전의 운영 체제에는 섀도 복사본의 타이밍을 오케스트레이션하기 위한 프레임워크와 섀도 복사본을 만들기 위해 쓰기 중 복사 기술을 사용하는 스토리지 필터 드라이버(파일 시스템 필터 드라이버 아님)가 포함됩니다. VSS(볼륨 섀도 복사본 서비스)는 섀도 복사본을 오케스트레이션합니다. 볼륨 섀도 복사본 드라이버(volsnap.sys)는 파일 시스템 아래의 스토리지 스택 위에 로드되는 스토리지 필터 드라이버입니다.

파일 시스템에 영향을 주는 중요한 스냅샷 관련 IOCTL은 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES. 이 IOCTL은 IOCTL임에도 불구하고 파일 시스템의 해석을 위한 것입니다. 이는 모든 파일 시스템이 IOCTL을 파일 시스템 후 처리 대기 중인 하위 수준 드라이버로 전달해야 하기 때문입니다.

IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES 로컬 파일 시스템의 볼륨 디바이스 개체 및 해당 볼륨에 연결되었을 수 있는 파일 시스템 필터 드라이버로만 전송됩니다. VPB(볼륨 매개 변수 블록) 구조의 RealDevice 멤버를 통해 볼륨에 연결된 스토리지 디바이스 개체에는 항상 다음 디바이스 유형 중 하나가 있습니다.

FILE_DEVICE_DISK

FILE_DEVICE_VIRTUAL_DISK

이 IOCTL은 원격 파일 시스템으로 전송되지 않습니다.

로컬 파일 시스템에서 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES 받으면 드라이버는 파일 시스템 메타데이터의 일관된 이미지를 만들어야 합니다. 드라이버에 서로 일치하지 않는 페이지가 없어야 합니다. 드라이버는 해당 메타데이터 및 매핑된 캐시 버퍼의 일부를 디스크에 플러시하지 않은 부분을 플러시하고 IOCTL이 하위 수준 드라이버에 의해 완료될 때까지 쓰기를 보유해야 합니다.

미니필터 파일 시스템 드라이버의 경우 필터 관리자는 이 IOCTL을 수신하고 드라이버가 이 IRP를 수신하도록 등록한 경우 미니필터 드라이버에 대한 콜백을 발급합니다. 미니필터 드라이버 또는 레거시 파일 시스템 필터 드라이버가 이 IOCTL을 수신하는 경우 드라이버는 디스크에 플러시되지 않은 메타데이터의 일부를 플러시해야 합니다. 필터 드라이버가 매핑된 캐시 버퍼를 사용하여 메타데이터를 작성하는 경우 파일 시스템은 모든 플러시를 처리합니다. 필터 드라이버는 파일 시스템이 변경 내용을 디스크로 플러시하는 동안 매핑된 캐시 버퍼에 쓰지 않도록 하기만 하면 됩니다. 레거시 파일 시스템 필터 드라이버는 IRP를 스택의 다음 드라이버로 전달해야 합니다.

드라이버는 하위 수준 드라이버에 전달하기 전에 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL이 포함된 이 IRP를 보유하는 동안 데이터를 플러시하도록 선택할 수 있습니다. IRP를 다음 하위 수준 드라이버로 보내기 전에 이 IOCTL을 보유하는 동안 디스크로 플러시된 모든 데이터는 결과 섀도 복사본에서 사용할 수 있는 데이터입니다.

이 볼륨이 읽기 전용 볼륨인 경우 일반적으로 파일 시스템 또는 파일 시스템 필터 드라이버가 이 IOCTL을 받을 때 다음 하위 수준 드라이버로 보내는 것을 제외하고는 수행해야 하는 작업이 없습니다.

요구 사항

요구 사항
헤더 ntifs.h(Ntifs.h, Fltkernel.h 포함)

추가 정보

IRP_MJ_DEVICE_CONTROL