구조적 스토리지 인터페이스

구조적 스토리지 서비스는 인터페이스의 세 가지 범주로 구성 됩니다. 각 집합은 복합 파일, 포함된 개체 및 이러한 개별 구성 요소가 저장되는 실제 미디어 간의 연속적인 간접 참조 또는 추상화 수준을 나타냅니다.

인터페이스의 첫 번째 범주는 IStorage, IStreamIRootStorage로 구성됩니다. 처음 두 인터페이스는 개체가 복합 파일 내에 저장되는 방법을 정의합니다. 이러한 인터페이스는 스토리지 요소 열기, 변경 내용 커밋 및 되돌리기, 요소 복사 및 이동, 스트림 읽기 및 쓰기를 위한 메서드를 제공합니다. 이러한 인터페이스는 개별 개체의 네이티브 데이터 형식을 인식하지 못하므로 이러한 개체를 영구 스토리지에 저장하는 방법이 없습니다. IRootStorage 인터페이스에는 복합 문서를 기본 파일 시스템 이름과 연결하기 위한 단일 메서드가 있습니다. 클라이언트는 복합 파일에 대해 이러한 인터페이스를 구현해야 합니다.

인터페이스의 두 번째 범주는 개체가 영구 데이터를 관리하기 위해 구현하는 IPersist 인터페이스로 구성됩니다. 이러한 인터페이스는 개별 개체의 데이터 형식을 읽는 메서드를 제공하므로 저장하는 방법을 알 수 있습니다. 클라이언트는 중첩된 개체의 네이티브 데이터 형식을 모르기 때문에 개체는 이러한 인터페이스를 구현해야 합니다. 그러나 이러한 인터페이스는 특정 물리적 스토리지 미디어에 대한 지식이 없습니다.

세 번째 범주는 하드 디스크 또는 테이프 드라이브와 같은 특정 물리적 미디어에 파일을 쓰는 메서드를 제공하는 단일 인터페이스 ILockBytes로 구성됩니다. 그러나 COM은 파일 기반 구현 및 메모리 기반 구현인 가장 일반적인 두 가지 상황에 대한 구현을 이미 제공하므로 대부분의 애플리케이션은 ILockBytes 인터페이스를 구현하지 않습니다. 복합 파일 스토리지 개체는 구현에서 직접 호출하지 않는 ILockBytes 메서드를 호출합니다.

복합 파일 구현 제한

구조적 스토리지 아키텍처의 COM 구현을 복합 파일이라고 합니다. 복합 파일에 구현된 스토리지 개체에는 IPropertyStorageIPropertySetStorage 인터페이스의 구현이 포함됩니다.

이러한 인터페이스의 복합 파일 구현에 대한 포인터는 StgCreateStorageEx 함수를 호출하여 새 복합 파일 개체를 만들거나 StgOpenStorageEx 를 호출하여 이전에 만든 복합 파일을 열어 가져옵니다.

이러한 인터페이스의 복합 파일 구현에 대한 포인터를 가져오는 다른 방법은 이전의 제한된 StgCreateDocfile 또는 StgOpenStorage 함수를 호출하는 것입니다. 네 가지 함수는 모두 복합 파일 구현으로 처리됩니다.

복합 파일 구현은 STGOPTIONS 구조에 정의된 대로 512 또는 4096 바이트 섹터를 사용하도록 구성할 수 있습니다.

복합 파일의 복합 파일 구현에는 다음과 같은 구현 제약 조건이 적용됩니다.

제한 복합 파일
파일 크기 제한: 512: 2기가바이트(GB) 4096: 최대 파일 시스템 제한
열린 요소에 필요한 최대 힙 크기: 512: 4MB(메가바이트) 4096: 최대 가상 메모리 제한
동시 루트가 열립니다(동일한 파일이 열립니다). STGM_READ 및 STGM_SHARE_DENY_WRITE 지정하는 경우 제한은 파일 시스템 제한에 따라 결정됩니다. 그렇지 않으면 동일한 파일의 동시 루트 열기가 20개로 제한됩니다.
파일의 요소 수: 512: 무제한이지만 요소 수가 4096인 경우 성능이 저하 될 수 있습니다. 무제한

4MB 힙 크기 제한으로 인해 트랜잭션 모드의 열린 요소 수는 일반적으로 수천 개의 요소로 제한됩니다.