Interfaces de almacenamiento estructurado

Los servicios de Almacenamiento estructurado se organizan en tres categorías de interfaces. Cada conjunto representa un nivel sucesivo de direccionamiento indirecto o abstracción entre un archivo compuesto, los objetos que contiene y los medios físicos en los que se almacenan estos componentes individuales.

La primera categoría de interfaces consta de IStorage, IStream e IRootStorage. Las dos primeras interfaces definen cómo se almacenan los objetos dentro de un archivo compuesto. Estas interfaces proporcionan métodos para abrir elementos de almacenamiento, confirmar y revertir cambios, copiar y mover elementos, y leer y escribir secuencias. Estas interfaces no reconocen los formatos de datos nativos de los objetos individuales y, por tanto, no tienen métodos para guardar esos objetos en el almacenamiento persistente. La interfaz IRootStorage tiene un único método para asociar un documento compuesto con un nombre de sistema de archivos subyacente. Los clientes deben implementar estas interfaces para sus archivos compuestos.

La segunda categoría de interfaces consta de las interfaces IPersist , que los objetos implementan para administrar sus datos persistentes. Estas interfaces proporcionan métodos para leer los formatos de datos de objetos individuales y, por tanto, saber cómo almacenarlos. Los objetos son responsables de implementar estas interfaces porque los clientes no conocen los formatos de datos nativos de sus objetos anidados. Sin embargo, estas interfaces no tienen conocimiento de medios de almacenamiento físico específicos.

Una tercera categoría consta de una sola interfaz, ILockBytes, que proporciona métodos para escribir archivos en medios físicos específicos, como un disco duro o una unidad de cinta. Sin embargo, la mayoría de las aplicaciones no implementarán la interfaz ILockBytes porque COM ya proporciona implementaciones para las dos situaciones más comunes, que son la implementación basada en archivos y la implementación basada en memoria. El objeto de almacenamiento de archivos compuesto llama a los métodos ILockBytes que no los llama directamente en la implementación.

Límites de implementación de archivos compuestos

La implementación COM de la arquitectura de Almacenamiento estructurado se denomina archivos compuestos. Los objetos de almacenamiento, tal como se implementan en archivos compuestos, incluyen una implementación de las interfaces IPropertyStorage e IPropertySetStorage .

Los punteros a la implementación de archivos compuestos de estas interfaces se adquieren llamando a la función StgCreateStorageEx para crear un nuevo objeto de archivo compuesto o StgOpenStorageEx para abrir un archivo compuesto creado anteriormente.

Un método alternativo para adquirir un puntero a la implementación de archivos compuestos de estas interfaces es llamando a la función StgCreateDocfile o StgOpenStorage más antigua y limitada. Las cuatro funciones se tratan como implementaciones de archivos compuestos.

La implementación del archivo compuesto se puede configurar para usar sectores de 512 o 4096 bytes, tal y como se define en la estructura STGOPTIONS .

La implementación de archivos compuestos de archivos compuestos está sujeta a las siguientes restricciones de implementación.

Límite Archivo compuesto
Límites de tamaño de archivo: 512: 2 gigabytes (GB) 4096: Límites del sistema de archivos
Tamaño máximo del montón necesario para los elementos abiertos: 512: 4 megabytes (MB) 4096: límites de memoria virtual
Se abre la raíz simultánea (se abre el mismo archivo): Si se especifican STGM_READ y STGM_SHARE_DENY_WRITE, los límites se determinan mediante los límites del sistema de archivos. De lo contrario, hay un límite de 20 aperturas de raíz simultáneas del mismo archivo.
Número de elementos de un archivo: 512: Ilimitado, pero el rendimiento puede degradarse si el número de elementos en los miles 4096: Ilimitado

Debido al límite de tamaño de montón de 4 MB, el número de elementos abiertos en modo de transacción se limita normalmente a varios miles de elementos.