IStorage  VGJO3R

The IStorage interface supports the creation and management of structured storage objects. Structured storage allows hierarchical storage of information within a single file, and is often referred to as  a file system within a file . Elements of a structured storage object are storages and streams. Storages are analogous to directories, and streams are analogous to files. Within a structured storage there will be a primary storage object that may contain substorages, possibly nested, and streams. Storages provide the structure of the object, and streams contain the data, which is manipulated through the IStream8MD3QE interface.

The IStorage interface provides methods for creating and managing the root storage object, child storage objects, and stream objects. These methods can create, open, enumerate, move, copy, rename, or delete the elements in the storage object.

An application must release its IStorage pointers when it is done with the storage object to deallocate memory used. There are also methods for changing the date and time of an element.

There are a number of different modes in which a storage object and its elements can be opened, determined by setting values from the STGMJWLKYA enumeration. One aspect of this is how changes are committed. You can set direct mode, in which in which changes to an object are immediately written to it, or transacted mode, in which changes are written to a buffer until explicitly committed. The IStorage interface provides methods for committing changes and reverting to the last-committed version. Other storage modes set, for example, a stream can be opened in read only mode or read/write mode. For more information, refer to the STGMJWLKYA enumeration.

Other methods provide a means to gain access to information about a storage object and its elements through the STATSTGN9JHJ6 structure.

When to Implement

Generally, you would not implement this interface unless you were defining a new storage scheme for your system. OLE provides a compound file implementation of the IStorage interface that supports transacted access. OLE provides a set of helper APIs to facilitate using the compound file implementation of storage objects. Refer to IStorage - Compound File Implementation14H.BPD.

When to Use

Call the methods of IStorage to manage substorages or streams within the current storage. This management includes creating, opening, or destroying sub-storages or streams, as well as managing aspects such as time stamps, names, etc. You can also commit changes or revert to previous version for storages opened in transacted mode. The methods of IStorage do not include means to read and write data this is reserved for IStream, which manages the actual data. While the IStorage and IStream8MD3QE interfaces are used to manipulate the storage object and its elements, the IPersistStorageQIWSID interface contains methods that are called to serialize the storage object and its elements to a disk file.

Methods VTable Order

IUnknown1NEM0LU Methods

Description

QueryInterface2Y54585

Returns pointers to supported interfaces.

AddRef1SHW0SS

Increments the reference count.

ReleaseDUW01A

Decrements the reference count.

 

IStorage Methods

Description

CreateStreamFF6TCS

Creates and opens a stream object with the specified name contained in this storage object.

OpenStreamNIUQTA

Opens an existing stream object within this storage object using the specified access permissions in grfMode.

CreateStorage3YXRP9

Creates and opens a new storage object within this storage object.

OpenStorage14G_RP

Opens an existing storage object with the specified name according to the specified access mode.

CopyTo9SWGGK

Copies the entire contents of this open storage object into another storage object. The layout of the destination storage object may differ.

MoveElementToFG6YAU

Copies or moves a substorage or stream from this storage object to another storage object.

CommitW250T5

Reflects changes for a transacted storage object to the parent level.

RevertHJ23EP

Discards all changes that have been made to to the storage object since the last commit operation.

EnumElements1UUS__P

Returns an enumerator object that can be used to enumerate the storage and stream objects contained within this storage object.

DestroyElement1361IB2

Removes the specified storage or stream from this storage object.

RenameElement13DZHGO

Renames the specified storage or stream in this storage object.

SetElementTimesX.FOHY

Sets the modification, access, and creation times of the indicated storage element, if supported by the underlying file system.

SetClass_CLF_1

Assigns the specified CLSID to this storage object.

SetStateBits16FRUW6

Stores up to 32 bits of state information in this storage object.

StatXY11ZW

Returns the STATSTGN9JHJ6 structure for this open storage object.