Structured Storage

Overview of the Structured Storage technology.

To develop Structured Storage, you need these headers:

For programming guidance for this technology, see:

Enumerations

Title Description
LOCKTYPE The LOCKTYPE enumeration values indicate the type of locking requested for the specified range of bytes. The values are used in the ILockBytes::LockRegion and IStream::LockRegion methods.
STATFLAG Indicate whether the method should try to return a name in the pwcsName member of the STATSTG structure.
STGC Specify the conditions for performing the commit operation in the IStorage::Commit and IStream::Commit methods.
STGMOVE Indicate whether a storage element is to be moved or copied.
STGTY The STGTY enumeration values are used in the type member of the STATSTG structure to indicate the type of the storage element. A storage element is a storage object, a stream object, or a byte-array object (LOCKBYTES).
STREAM_SEEK The STREAM_SEEK enumeration values specify the origin from which to calculate the new seek-pointer location.

Functions

Title Description
BeginMonitor The BeginMonitor method is used to begin monitoring when a loading operation is started. When the operation is complete, the application must call ILayoutStorage::EndMonitor.
Clone Creates a new enumerator that contains the same enumeration state as the current STATSTG structure enumerator.
Clone The Clone method creates a new stream object with its own seek pointer that references the same bytes as the original stream.
Clone Creates an enumerator that contains the same enumeration state as the current STATPROPSETSTG structure enumerator.
Clone Creates an enumerator that contains the same enumeration state as the current STATPROPSTG structure enumerator.
Clone Creates an enumerator that contains the same enumeration state as the current STATPROPSETSTG structure enumerator.
Clone Creates an enumerator that contains the same enumeration state as the current STATPROPSTG structure enumerator.
Commit The Commit method ensures that any changes made to a storage object open in transacted mode are reflected in the parent storage.
Commit The Commit method ensures that any changes made to a stream object open in transacted mode are reflected in the parent storage.
Commit Saves changes made to a property storage object to the parent storage object.
Commit Saves changes made to a property storage object to the parent storage object.
CopyTo Copies the entire contents of an open storage object to another storage object.
CopyTo Copies a specified number of bytes from the current seek pointer in the stream to the current seek pointer in another stream.
Create Creates and opens a new property set in the property set storage object.
CreateILockBytesOnHGlobal Creates a byte array object that uses an HGLOBAL memory handle to store the bytes intended for in-memory storage of a compound file.
CreateStorage Creates and opens a new storage object nested within this storage object with the specified name in the specified access mode.
CreateStream Creates and opens a stream object with the specified name contained in this storage object.
CreateStreamOnHGlobal Creates a stream object that uses an HGLOBAL memory handle to store the stream contents.
Delete The Delete method deletes one of the property sets contained in the property set storage object.
DeleteMultiple The DeleteMultiple method deletes as many of the indicated properties as exist in this property set.
DeleteMultiple The DeleteMultiple method deletes as many of the indicated properties as exist in this property set.
DeletePropertyNames The DeletePropertyNames method deletes specified string names from the current property set.
DeletePropertyNames The DeletePropertyNames method deletes specified string names from the current property set.
DestroyElement Removes the specified storage or stream from this storage object.
EndMonitor The EndMonitor method ends monitoring of a compound file. Must be preceded by a call to ILayoutStorage::BeginMonitor.
Enum The Enum method creates an enumerator object which contains information on the property sets stored in this property set storage. On return, this method supplies a pointer to the IEnumSTATPROPSETSTG pointer on the enumerator object.
Enum The Enum method creates an enumerator object designed to enumerate data of type STATPROPSTG, which contains information on the current property set. On return, this method supplies a pointer to the IEnumSTATPROPSTG pointer on this object.
Enum The Enum method creates an enumerator object designed to enumerate data of type STATPROPSTG, which contains information on the current property set. On return, this method supplies a pointer to the IEnumSTATPROPSTG pointer on this object.
EnumElements The EnumElements method retrieves a pointer to an enumerator object that can be used to enumerate the storage and stream objects contained within this storage object.
FillAppend The FillAppend method writes a new block of bytes to the end of a byte array.
FillAt The FillAt method writes a new block of data to a specified location in the byte array.
Flush The Flush method ensures that any internal buffers maintained by the ILockBytes implementation are written out to the underlying physical storage.
FmtIdToPropStgName Converts a property set format identifier (FMTID) to its storage or stream name.
FreePropVariantArray The FreePropVariantArray function calls PropVariantClear on each of the PROPVARIANT structures in the rgvars array to make the value zero for each of the members of the array.
GetConvertStg The GetConvertStg function returns the current value of the convert bit for the specified storage object.
GetHGlobalFromILockBytes The GetHGlobalFromILockBytes function retrieves a global memory handle to a byte array object created using the CreateILockBytesOnHGlobal function.
GetHGlobalFromStream The GetHGlobalFromStream function retrieves the global memory handle to a stream that was created through a call to the CreateStreamOnHGlobal function.
HaveWriteAccess The HaveWriteAccess method indicates whether the write lock has been taken.
LayoutScript The LayoutScript method provides explicit directions for reordering the storages, streams, and controls in a compound file to match the order in which they are accessed during the download.
LockRegion The LockRegion method restricts access to a specified range of bytes in the byte array.
LockRegion The LockRegion method restricts access to a specified range of bytes in the stream.
MoveElementTo The MoveElementTo method copies or moves a substorage or stream from this storage object to another storage object.
Next Retrieves a specified number of STATSTG structures, that follow in the enumeration sequence.
Next Retrieves a specified number of STATPROPSETSTG structures that follow subsequently in the enumeration sequence.
Next Retrieves a specified number of STATPROPSTG structures, that follow subsequently in the enumeration sequence.
Next Retrieves a specified number of STATPROPSETSTG structures that follow subsequently in the enumeration sequence.
Next Retrieves a specified number of STATPROPSTG structures, that follow subsequently in the enumeration sequence.
OleConvertIStorageToOLESTREAM The OleConvertIStorageToOLESTREAM function converts the specified storage object from OLE 2 structured storage to the OLE 1 storage object model but does not include the presentation data. This is one of several compatibility functions.
OleConvertIStorageToOLESTREAMEx The OleConvertIStorageToOLESTREAMEx function converts the specified storage object from OLE 2 structured storage to the OLE 1 storage object model, including the presentation data.
OleConvertOLESTREAMToIStorage Converts the specified object from the OLE 1 storage model to an OLE 2 structured storage object without specifying presentation data.
OleConvertOLESTREAMToIStorageEx The OleConvertOLESTREAMToIStorageEx function converts the specified object from the OLE 1 storage model to an OLE 2 structured storage object including presentation data. This is one of several compatibility functions.
Open Opens a property set contained in the property set storage object.
OpenStorage Opens an existing storage object with the specified name in the specified access mode.
OpenStream Opens an existing stream object within this storage object in the specified access mode.
PropStgNameToFmtId Converts a property set storage or stream name to its format identifier.
PropVariantClear Frees all elements that can be freed in a given PROPVARIANT structure.
PropVariantCopy The PropVariantCopy function copies the contents of one PROPVARIANT structure to another.
PropVariantInit The PropVariantInit function initializes a PROPVARIANT structure.Note  This function is implemented as a macro, available by including the provided ole2.h header file.
Read Reads a specified number of bytes from the stream object into memory, starting at the current seek pointer.
ReadAt The ReadAt method reads a specified number of bytes starting at a specified offset from the beginning of the byte array object.
ReadClassStg The ReadClassStg function reads the CLSID previously written to a storage object with the WriteClassStg function.
ReadClassStm Reads the CLSID previously written to a stream object with the WriteClassStm function.
ReadFmtUserTypeStg The ReadFmtUserTypeStg function returns the clipboard format and user type previously saved with the WriteFmtUserTypeStg function.
ReadMultiple Reads specified properties from the current property set.
ReadMultiple Reads specified properties from the current property set.
ReadPropertyNames Retrieves any existing string names for the specified property IDs.
ReadPropertyNames Retrieves any existing string names for the specified property IDs.
ReLayoutDocfile The ReLayoutDocfile method rewrites the compound file, using the layout script obtained through monitoring, or provided through explicit layout scripting, to create a new compound file.
ReLayoutDocfileOnILockBytes Is not implemented. If called, it returns STG_E_UNIMPLEMENTEDFUNCTION.
ReleaseWriteAccess The ReleaseWriteAccess method releases the write lock previously obtained.
RenameElement The RenameElement method renames the specified substorage or stream in this storage object.
Reset Resets the enumeration sequence to the beginning of the STATSTG structure array.
Reset Resets the enumeration sequence to the beginning of the STATPROPSETSTG structure array.
Reset Resets the enumeration sequence to the beginning of the STATPROPSTG structure array.
Reset Resets the enumeration sequence to the beginning of the STATPROPSETSTG structure array.
Reset Resets the enumeration sequence to the beginning of the STATPROPSTG structure array.
Revert The Revert method discards all changes that have been made to the storage object since the last commit operation.
Revert The Revert method discards all changes that have been made to a transacted stream since the last IStream::Commit call. On streams open in direct mode and streams using the COM compound file implementation of IStream::Revert, this method has no effect.
Revert The Revert method discards all changes to the named property set since it was last opened or discards changes that were last committed to the property set. This method has no effect on a direct-mode property set.
Revert The Revert method discards all changes to the named property set since it was last opened or discards changes that were last committed to the property set. This method has no effect on a direct-mode property set.
Seek Changes the seek pointer to a new location. The new location is relative to either the beginning of the stream, the end of the stream, or the current seek pointer.
SetClass The SetClass method assigns the specified class identifier (CLSID) to this storage object.
SetClass The SetClass method assigns a new CLSID to the current property storage object, and persistently stores the CLSID with the object.
SetClass The SetClass method assigns a new CLSID to the current property storage object, and persistently stores the CLSID with the object.
SetConvertStg The SetConvertStg function sets the convert bit in a storage object to indicate that the object is to be converted to a new class when it is opened. The setting can be retrieved with a call to the GetConvertStg function.
SetElementTimes The SetElementTimes method sets the modification, access, and creation times of the specified storage element, if the underlying file system supports this method.
SetFillSize The SetFillSize method sets the expected size of the byte array.
SetSize The SetSize method changes the size of the byte array.
SetSize Changes the size of the stream object.
SetStateBits The SetStateBits method stores up to 32 bits of state information in this storage object.
SetTimes The SetTimes method sets the modification, access, and creation times of this property set, if supported by the implementation. Not all implementations support all these time values.
SetTimes The SetTimes method sets the modification, access, and creation times of this property set, if supported by the implementation. Not all implementations support all these time values.
Skip Skips a specified number of STATSTG structures in the enumeration sequence.
Skip Skips a specified number of STATPROPSETSTG structures in the enumeration sequence.
Skip Skips the specified number of STATPROPSTG structures in the enumeration sequence.
Skip Skips a specified number of STATPROPSETSTG structures in the enumeration sequence.
Skip Skips the specified number of STATPROPSTG structures in the enumeration sequence.
Stat The Stat method retrieves a STATSTG structure containing information for this byte array object.
Stat The Stat method retrieves the STATSTG structure for this open storage object.
Stat The Stat method retrieves the STATSTG structure for this stream.
Stat The Stat method retrieves information about the current open property set.
Stat The Stat method retrieves information about the current open property set.
StgConvertPropertyToVariant Converts a SERIALIZEDPROPERTYVALUE data type to a PROPVARIANT data type.
StgConvertVariantToProperty Converts a PROPVARIANT data type to a SERIALIZEDPROPERTYVALUE data type.
StgCreateDocfile Creates a new compound file storage object using the COM-provided compound file implementation for the IStorage interface.
StgCreateDocfileOnILockBytes Creates and opens a new compound file storage object on top of a byte-array object provided by the caller.
StgCreatePropSetStg Creates a property set storage object from a specified storage object.
StgCreatePropStg Creates and opens a property set in a specified storage or stream object.
StgCreateStorageEx Creates a new storage object using a provided implementation for the IStorage or IPropertySetStorage interfaces.
StgDeserializePropVariant The StgDeserializePropVariant function converts a SERIALIZEDPROPERTYVALUE data type to a PROPVARIANT data type.
StgGetIFillLockBytesOnFile Opens a wrapper object on a temporary file.
StgGetIFillLockBytesOnILockBytes Creates a new wrapper object on a byte array object provided by the caller.
StgIsStorageFile The StgIsStorageFile function indicates whether a particular disk file contains a storage object.
StgIsStorageILockBytes The StgIsStorageILockBytes function indicates whether the specified byte array contains a storage object.
StgOpenAsyncDocfileOnIFillLockBytes Opens an existing root asynchronous storage object on a byte-array wrapper object provided by the caller.
StgOpenLayoutDocfile Opens a compound file on an ILockBytes implementation that is capable of monitoring sector data.
StgOpenPropStg Opens a specified property set in a specified storage or stream object.
StgOpenStorage Opens an existing root storage object in the file system.
StgOpenStorageEx Opens an existing root storage object in the file system. Use this function to open Compound Files and regular files.
StgOpenStorageOnILockBytes The StgOpenStorageOnILockBytes function opens an existing storage object that does not reside in a disk file, but instead has an underlying byte array provided by the caller.
StgPropertyLengthAsVariant The StgPropertyLengthAsVariant function examines a SERIALIZEDPROPERTYVALUE and returns the amount of memory that this property would occupy as a PROPVARIANT.
StgSerializePropVariant The StgSerializePropVariant function converts a PROPVARIANT data type to a SERIALIZEDPROPERTYVALUE data type.
StgSetTimes The StgSetTimes function sets the creation, access, and modification times of the indicated file, if supported by the underlying file system.
SwitchToFile The SwitchToFile method copies the current file associated with the storage object to a new file.
Terminate The Terminate method informs the byte array that the download has been terminated, either successfully or unsuccessfully.
UnlockRegion The UnlockRegion method removes the access restriction on a previously locked range of bytes.
UnlockRegion The UnlockRegion method removes the access restriction on a range of bytes previously restricted with IStream::LockRegion.
WaitForWriteAccess The WaitForWriteAccess method obtains exclusive write access to a storage object.
Write Writes a specified number of bytes into the stream object starting at the current seek pointer.
WriteAt The WriteAt method writes the specified number of bytes starting at a specified offset from the beginning of the byte array.
WriteClassStg The WriteClassStg function stores the specified class identifier (CLSID) in a storage object.
WriteClassStm The WriteClassStm function stores the specified CLSID in the stream.
WriteFmtUserTypeStg The WriteFmtUserTypeStg function writes a clipboard format and user type to the storage object.
WriteMultiple Writes a specified group of properties to the current property set.
WriteMultiple Writes a specified group of properties to the current property set.
WritePropertyNames Assigns string IPropertyStoragenames to a specified array of property IDs in the current property set.
WritePropertyNames Assigns string IPropertyStoragenames to a specified array of property IDs in the current property set.

Interfaces

Title Description
IDirectWriterLock The IDirectWriterLock interface enables a single writer to obtain exclusive write access to a root storage object opened in direct mode while allowing concurrent access by multiple readers.
IEnumSTATPROPSETSTG Iterates through an array of STATPROPSETSTG structures. The STATPROPSETSTG structures contain statistical data about the property sets managed by the current IPropertySetStorage instance.
IEnumSTATPROPSETSTG Iterates through an array of STATPROPSETSTG structures. The STATPROPSETSTG structures contain statistical data about the property sets managed by the current IPropertySetStorage instance.
IEnumSTATPROPSTG Iterates through an array of STATPROPSTG structures. The STATPROPSTG structures contain statistical data about properties in a property set.
IEnumSTATPROPSTG Iterates through an array of STATPROPSTG structures. The STATPROPSTG structures contain statistical data about properties in a property set.
IEnumSTATSTG Enumerates an array of STATSTG structures.
IFillLockBytes The IFillLockBytes interface enables downloading code to write data asynchronously to a structured storage byte array.
ILayoutStorage The ILayoutStorage interface enables an application to optimize the layout of its compound files for efficient downloading across a slow link.
ILockBytes The ILockBytes interface is implemented on a byte array object that is backed by some physical storage, such as a disk file, global memory, or a database.
IPropertySetStorage The IPropertySetStorage interface creates, opens, deletes, and enumerates property set storages that support instances of the IPropertyStorage interface.
IPropertyStorage The IPropertyStorage interface manages the persistent properties of a single property set.
IPropertyStorage The IPropertyStorage interface manages the persistent properties of a single property set.
IRootStorage The IRootStorage interface contains a single method that switches a storage object to a different underlying file and saves the storage object to that file.
ISequentialStream The ISequentialStream interface supports simplified sequential access to stream objects. The IStream interface inherits its Read and Write methods from ISequentialStream.
IStorage The IStorage interface supports the creation and management of structured storage objects.
IStream The IStream interface lets you read and write data to stream objects.

Structures

Title Description
PROPSPEC The PROPSPEC structure is used by many of the methods of IPropertyStorage to specify a property either by its property identifier (ID) or the associated string name.
PROPSPEC The PROPSPEC structure is used by many of the methods of IPropertyStorage to specify a property either by its property identifier (ID) or the associated string name.
PROPVARIANT Used in the ReadMultiple and WriteMultiple methods of IPropertyStorage to define the type tag and the value of a property in a property set.
PROPVARIANT Used in the ReadMultiple and WriteMultiple methods of IPropertyStorage to define the type tag and the value of a property in a property set.
RemSNB The RemSNB structure is used for marshaling the SNB data type.Defined in the IStorage interface (Storag.idl).
STATPROPSETSTG The STATPROPSETSTG structure contains information about a property set.
STATPROPSETSTG The STATPROPSETSTG structure contains information about a property set.
STATPROPSTG Contains data about a single property in a property set. This data is the property ID and type tag, and the optional string name that may be associated with the property.
STATPROPSTG Contains data about a single property in a property set. This data is the property ID and type tag, and the optional string name that may be associated with the property.
STATSTG Contains statistical data about an open storage, stream, or byte-array object.
STGOPTIONS Specifies features of the storage object, such as sector size, in the StgCreateStorageEx and StgOpenStorageEx functions.
StorageLayout Describes a single block of data, including its name, location, and length.