Platform SDK: COM

Interfaces

Structured Storage services are organized into three categories of interfaces. Each set represents a successive level of indirection, or abstraction, between a compound file, the objects it contains, and the physical media on which these individual components are stored.

The first category of interfaces consists of IStorage, IStream, and IRootStorage. The first two interfaces define how objects are stored within a compound file. These interfaces provide methods for opening storage elements, committing and reverting changes, copying and moving elements, and reading and writing streams. These interfaces do not understand the native data formats of the individual objects and therefore have no methods for saving those objects to persistent storage. The IRootStorage interface has a single method for associating a compound document with an underlying file system name. Clients are responsible for implementing these interfaces on behalf of their compound files.

The second category of interfaces consists of the IPersist interfaces, which objects implement to manage their persistent data. These interfaces provide methods to read the data formats of individual objects and therefore know how to store them. Objects are responsible for implementing these interfaces because clients do not know the native data formats of their nested objects. These interfaces, however, have no knowledge of specific physical storage media.

A third category consists of a single interface, ILockBytes, which provides methods for writing files to specific physical media, such as a hard disk or tape drive. COM provides an ILockBytes interface for the operating system's file system.

Compound File Implementation Limits

The COM implementation of Structured Storage architecture is called compound files. Storage objects, as implemented in compound files, include an implementation of the IPropertyStorage and IPropertySetStorage interfaces.

Pointers to the compound file implementation of these interfaces are acquired by calling the StgCreateStorageEx function to create a new compound file object, or StgOpenStorageEx to open a previously created compound file.

An alternative method for acquiring a pointer to the compound file implementation of these interfaces is by calling the older and more limited StgCreateDocfile or StgOpenStorage function. All four functions are treated as compound file implementations.

The compound file implementation can be configured to use 512 or 4096 byte sectors, as defined in the STGOPTIONS structure.

The compound file implementation of compound files is subject to the following implementation constraints.

Limit Compound file
File size limits: 512: 2 gigabytes (GB)

4096: Up to file system limits

Maximum heap size required for open elements: 512: 4 megabytes (MB)

4096: Up to virtual memory limits

Concurrent root opens (opens of the same file): If STGM_READ and STGM_SHARE_DENY_WRITE are specified, limits are dictated by the file-system limits. Otherwise, there is a limit of 20 concurrent root opens of the same file.
Number of elements in a file: 512: Unlimited, but performance may degrade if elements number in the thousands

4096: Unlimited


Due to the 4-MB heap-size limit, the number of open elements in transacted mode is typically limited to several thousand elements.

The following is a list of hyperlinks for the Interface section of Structured Storage.

See Also

Samples