Share via


스토리지 디바이스 스택, 스토리지 볼륨 및 파일 시스템 스택

참고

최적의 안정성과 성능을 위해 레거시 파일 시스템 필터 드라이버 대신 필터 관리자를 지원하는 파일 시스템 미니필터 드라이버를 사용합니다. 레거시 드라이버를 미니필터 드라이버로 포팅하려면 레거시 필터 드라이버 포팅 지침을 참조하세요.

파일 시스템 레거시 필터 드라이버가 파일 시스템 및 볼륨에 연결하는 방법을 살펴보기 전에 스토리지 디바이스 스택, 스토리지 볼륨 및 파일 시스템 스택 간의 관계를 이해해야 합니다.

스토리지 디바이스 스택

대부분의 스토리지 드라이버는 PnP 관리자가 로드하고 관리하는 PnP 디바이스 드라이버입니다. 스토리지 디바이스는 컴퓨터의 모든 물리적 또는 논리적 디바이스에 대해 디바이스 노드 또는 devnode를 포함하는 PnP 디바이스 트리에 표시됩니다. 파일 시스템 및 파일 시스템 필터 드라이버는 PnP 디바이스 드라이버가 아니라는 점에 유의해야 합니다. 따라서 PnP 디바이스 트리 에는 이에 대한 devnode가 없습니다.

특정 스토리지 디바이스에 대한 devnode에는 디바이스에 대한 스토리지 디바이스 스택 이 포함됩니다. 디바이스의 스토리지 디바이스 드라이버를 나타내는 연결된 디바이스 개체의 체인입니다. 디스크와 같은 스토리지 디바이스에는 하나 이상의 논리 볼륨(파티션 또는 동적 볼륨)이 포함될 수 있으므로 스토리지 디바이스 스택 자체는 종종 스택보다 트리처럼 보입니다. 이 트리의 루트는 스토리지 어댑터 또는 스토리지 스택과 통합된 다른 디바이스 스택에 대한 FDO(기능 디바이스 개체)입니다. 이 트리의 잎은 파일 시스템 볼륨을 탑재할 수 있는 스토리지 볼륨이라고도 하는 논리 볼륨에 대한 PDO(물리적 디바이스 개체)입니다.

일부 일반적인 스토리지 디바이스 스택에 대한 다이어그램 및 설명은 스토리지 디바이스 디자인 가이드의 다음 섹션을 참조하세요.

스토리지 볼륨

볼륨은 디렉터리 및 파일을 저장하도록 포맷된 고정 디스크, 플로피 디스크 또는 CD-ROM과 같은 스토리지 디바이스입니다. 큰 볼륨은 파티션이라고도 하는 둘 이상의 논리 볼륨으로 나눌 수 있습니다. 각 논리 볼륨은 NTFS, FAT 또는 CDFS와 같은 특정 미디어 기반 파일 시스템에서 사용하도록 형식이 지정됩니다.

스토리지 볼륨 또는 스토리지 디바이스 개체는 일반적으로 시스템에 대한 논리적 볼륨을 나타내는 디바이스 개체인 PDO(물리적 디바이스 개체)입니다. 스토리지 디바이스 개체는 스토리지 디바이스 스택에 있지만 반드시 스택의 최상위 디바이스 개체는 아닙니다.

파일 시스템이 스토리지 볼륨에 탑재되면 파일 시스템에 볼륨을 나타내는 파일 시스템 VDO(볼륨 디바이스 개체)를 만듭니다. 파일 시스템 VDO는 VPB(볼륨 매개 변수 블록 )라는 공유 개체를 통해 스토리지 디바이스 개체에 탑재됩니다.

탑재 관리자

탑재 관리자는 볼륨 이름, 드라이브 문자 및 볼륨 탑재 지점과 같은 스토리지 볼륨 정보를 관리하는 I/O 시스템의 일부입니다. 새 스토리지 볼륨이 시스템에 추가되면 Mount Manager는 다음 방법 중 하나로 도착 알림을 받습니다.

  • 스토리지 볼륨을 만든 클래스 드라이버는 IoRegisterDeviceInterface 를 호출하여 MOUNTDEV_MOUNTED_DEVICE_GUID 인터페이스 클래스에 새 인터페이스를 등록합니다. 이 경우 플러그 앤 플레이 디바이스 인터페이스 알림 메커니즘은 탑재 관리자에게 볼륨의 시스템 도착을 경고합니다.

  • 스토리지 볼륨의 드라이버는 탑재 관리자에게 I/O 제어 코드에 대한 IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION 지정하는 IRP_MJ_DEVICE_CONTROL 요청을 보냅니다. 이 요청은 IoBuildDeviceIoControlRequest를 호출하여 만들 수 있습니다.

고유한 볼륨 이름

Mount Manager는 볼륨 드라이버에 다음 정보를 쿼리하여 새 스토리지 볼륨의 도착에 응답합니다.

  • 시스템 개체 트리의 Device 디렉터리에 있는 볼륨의 비영구 디바이스 개체 이름(또는 대상 이름)(예: "\Device\HarddiskVolume1")

  • 고유한 볼륨 이름이라고도 하는 볼륨의 GUID(Globally Unique Identifier)입니다.

  • 드라이브 문자(예: "\DosDevices\D:")와 같은 볼륨에 대해 제안된 영구 기호 링크 이름입니다.

스토리지 드라이버와 Mount Manager 간의 상호 작용에 대한 자세한 내용은 스토리지 클래스 드라이버에서 탑재 관리자 요청 지원을 참조하세요.

파일 시스템 스택

파일 시스템 드라이버는 CDO(제어 디바이스 개체) 및 VDO(볼륨 디바이스 개체)라는 두 가지 유형의 디바이스 개체를 만듭니다. 파일 시스템 스택은 연결된 파일 시스템 필터 드라이버에 대한 필터 디바이스 개체와 함께 이러한 디바이스 개체 중 하나로 구성됩니다. 파일 시스템의 디바이스 개체는 항상 스택의 아래쪽을 형성합니다.

파일 시스템 CDO

파일 시스템 CDO는 개별 볼륨이 아닌 전체 파일 시스템을 나타내며 전역 파일 시스템 큐에 저장됩니다. 파일 시스템은 DriverEntry 루틴에 하나 이상의 명명된 CDO를 만듭니다. 예를 들어 FastFat은 두 개의 CDO를 만듭니다. 하나는 고정 미디어용이고 다른 하나는 이동식 미디어용입니다. CDFS는 이동식 미디어만 있기 때문에 CDO를 하나만 만듭니다.

파일 시스템 CDO의 이름을 지정해야 합니다. 파일 시스템 필터 드라이버뿐만 아니라 많은 커널 모드 지원 루틴은 VDO와 CDO 간의 이러한 차이를 구분하는 방법으로 사용하기 때문입니다.

파일 시스템 VDO

파일 시스템 VDO는 파일 시스템에 의해 탑재된 볼륨을 나타냅니다. 파일 시스템은 일반적으로 볼륨 탑재 요청에 대한 응답으로 볼륨을 탑재할 때 VDO를 만듭니다. CDO와 달리 VDO는 항상 특정 논리 또는 물리적 스토리지 디바이스와 연결됩니다.

참고

볼륨 디바이스 개체의 이름을 지정하면 보안 구멍이 생성되므로 CDO와 달리 VDO의 이름을 지정해서는 안 됩니다.