StorageModeFlags Enumeration

The STGM (Storage Mode) constants are flags that indicate conditions for creating and deleting the object and access modes for the object.

The STGM (Storage Mode) constants are included in the IStorage, IStream, and IPropertySetStorage interfaces and in the StgCreateDocfile, StgCreateStorageEx, StgCreateDocfileOnILockBytes, StgOpenStorage, and StgOpenStorageEx functions.

These elements are often combined using an OR operator. They are interpreted in groups as listed in the following table. It is not valid to use more than one element from a single group.

Use a flag from the creation group when creating an object, such as with StgCreateStorageEx or IStorage::CreateStream.

You can combine these flags, but you can only choose one flag from each group of related flags. Typically one flag from each of the access and sharing groups must be specified for all functions and methods which use these constants. Flags from other groups are optional.

Definition

Namespace: DevCase.Win32.Enums
Assembly: DevCase.net48 (in DevCase.net48.dll) Version: 6.0.0.0 (6.0)
XMLNS for XAML: Not mapped to an xmlns.
[FlagsAttribute]
public enum StorageModeFlags

Remarks

Members

Access_Read 0 Indicates that the object is read-only, meaning that modifications cannot be made.

For example, if a stream object is opened with Access_Read, the ISequentialStream:Read method may be called, but the ISequentialStream:Write method may not.

Similarly, if a storage object opened with Access_Read, the IStorage:OpenStream And IStorage:OpenStorage methods may be called, but the IStorage:CreateStream And IStorage:CreateStorage methods may not.

Creation_FailIfExists 0 Causes the create operation to fail if an existing object with the specified name exists.

In this case, STG_E_FILEALREADYEXISTS is returned.

This is the default creation mode; that is, if no other create flag is specified, Creation_FailIfExists is implied.

Transactioning_Direct 0 Indicates that, in direct mode, each change to a storage or stream element is written as it occurs.

This is the default if neither Transactioning_Direct nor Transactioning_Transacted is specified.

Access_Write 1 Enables you to save changes to the object, but does not permit access to its data.

The provided implementations of the IPropertyStorage and IPropertySetStorage interfaces do not support this write-only mode.

Access_ReadWrite 2 Enables access and modification of object data.

For example, if a stream object is created or opened in this mode, it is possible to call both IStream::Read and IStream::Write.

Be aware that this constant is not a simple binary OR operation of the Access_Write and Access_Read elements.

Sharing_Exclusive 16 Prevents others from subsequently opening the object in any mode.

Be aware that this value is not a simple bitwise OR operation of the Sharing_DenyRead and Sharing_DenyWrite values.

In transacted mode, sharing of Sharing_DenyWrite or Sharing_Exclusive can significantly improve performance because they do not require snapshots.

Sharing_DenyWrite 32 Prevents others from subsequently opening the object for Access_Write or Access_ReadWrite access.

In transacted mode, sharing of Sharing_DenyWrite or Sharing_Exclusive can significantly improve performance because they do not require snapshots.

Sharing_DenyRead 48 Prevents others from subsequently opening the object in Access_Read mode.

It is typically used on a root storage object.

Sharing_DenyNone 64 Specifies that subsequent openings of the object are not denied read or write access.

If no flag from the sharing group is specified, this flag is assumed.

Creation_Create 4,096 Indicates that an existing storage object or stream should be removed before the new object replaces it. A new object is created when this flag is specified only if the existing object has been successfully removed.

This flag Is used When attempting To create

- A storage object on a disk, but a file of that name exists.

- An object inside a storage object, but an object with the specified name exists.

- A byte array object, but one with the specified name exists.

Transactioning_Transacted 65,536 Indicates that, in transacted mode, changes are buffered and written only if an explicit commit operation is called.

To ignore the changes, call the Revert method in the IStream, IStorage, or IPropertyStorage interface.

The COM compound file implementation of IStorage does not support transacted streams, which means that streams can be opened only in direct mode, and you cannot revert changes to them, however transacted storages are supported.

The compound file, stand-alone, and NTFS file system implementations of IPropertySetStorage similarly do not support transacted, simple property sets because these property sets are stored in streams.

However, transactioning of nonsimple property sets, which can be created by specifying the PROPSETFLAG_NONSIMPLE flag in the grfFlags parameter of IPropertySetStorage::Create, are supported.

Creation_Convert 131,072 Creates the new object while preserving existing data in a stream named "Contents".

In the case of a storage object or a byte array, the old data is formatted into a stream regardless of whether the existing file or byte array currently contains a layered storage object.

This flag can only be used when creating a root storage object.

It cannot be used within a storage object; for example, in IStorage::CreateStream.

It is also not valid to use this flag and the DeleteOnRelease_Yes flag simultaneously.

Sharing_Priority 262,144 Opens the storage object with exclusive access to the most recently committed version.

Thus, other users cannot commit changes to the object while you have it open in priority mode.

You gain performance benefits for copy operations, but you prevent others from committing changes.

Limit the time that objects are open in priority mode.

You must specify Transactioning_Direct and Access_Read with priority mode, and you cannot specify DeleteOnRelease_Yes.

DeleteOnRelease_Yes is only valid when creating a root object, such as with StgCreateStorageEx.

It is not valid when opening an existing root object, such as with StgOpenStorageEx.

It is also not valid when creating or opening a subelement, such as with IStorage::OpenStorage.

TransactioningPerformance_NoScratch 1,048,576 Indicates that, in transacted mode, a temporary scratch file is usually used to save modifications until the Commit method is called.

Specifying TransactioningPerformance_NoScratch permits the unused portion of the original file to be used as work space instead of creating a new file for that purpose.

This does not affect the data in the original file, and in certain cases can result in improved performance.

It is not valid to specify this flag without also specifying Transactioning_Transacted, and this flag may only be used in a root open.

TransactioningPerformance_NoSnapshot 2,097,152 This flag is used when opening a storage object with Transactioning_Transacted and without Sharing_Exclusive or Sharing_DenyWrite.

In this case, specifying TransactioningPerformance_NoSnapshot prevents the system-provided implementation from creating a snapshot copy of the file.

Instead, changes to the file are written to the end of the file.

Unused space is not reclaimed unless consolidation is performed during the commit, and there is only one current writer on the file.

When the file is opened in no snapshot mode, another open operation cannot be performed without specifying TransactioningPerformance_NoSnapshot.

This flag may only be used in a root open operation.

DirectSWMRorSimple_SWMR 4,194,304 Supports direct mode for single-writer multireader (SWRM) file operations.
DeleteOnRelease_Yes 67,108,864 Indicates that the underlying file is to be automatically destroyed when the root storage object is released.

This feature is most useful for creating temporary files.

This flag can only be used when creating a root object, such as with StgCreateStorageEx.

It is not valid when opening a root object, such as with StgOpenStorageEx, or when creating or opening a subelement, such as with IStorage::CreateStream.

It is also not valid to use this flag and the Creation_Convert flag simultaneously.

DirectSWMRorSimple_Simple 134,217,728 Provides a faster implementation of a compound file in a limited, but frequently used, case.

See Also