Win32 API 日本語リファレンス
ホームSystem.Com › STGM

STGM

列挙型フラグ
基底型u4

メンバー 18

名前10進16進
STGM_DIRECT00x0
STGM_TRANSACTED655360x10000
STGM_SIMPLE1342177280x8000000
STGM_READ00x0
STGM_WRITE10x1
STGM_READWRITE20x2
STGM_SHARE_DENY_NONE640x40
STGM_SHARE_DENY_READ480x30
STGM_SHARE_DENY_WRITE320x20
STGM_SHARE_EXCLUSIVE160x10
STGM_PRIORITY2621440x40000
STGM_DELETEONRELEASE671088640x4000000
STGM_NOSCRATCH10485760x100000
STGM_CREATE40960x1000
STGM_CONVERT1310720x20000
STGM_FAILIFTHERE00x0
STGM_NOSNAPSHOT20971520x200000
STGM_DIRECT_SWMR41943040x400000

公式ドキュメント

STGM 定数は、オブジェクトの作成および削除の条件と、オブジェクトへのアクセスモードを示すフラグです。STGM 定数は、IStorageIStreamIPropertySetStorage の各インターフェイスと、StgCreateDocfileStgCreateStorageExStgCreateDocfileOnILockBytesStgOpenStorageStgOpenStorageEx の各関数で使用されます。

これらの要素は、OR 演算子で組み合わせて使用されることがよくあります。これらは次の表に示すグループ単位で解釈されます。1 つのグループから複数の要素を使用することはできません。

StgCreateStorageExIStorage::CreateStream などでオブジェクトを作成するときは、作成グループのフラグを使用します。

トランザクション処理の詳細については、「解説」セクションを参照してください。

グループ フラグ
アクセス STGM_READ 0x00000000L
STGM_WRITE 0x00000001L
STGM_READWRITE 0x00000002L
共有 STGM_SHARE_DENY_NONE 0x00000040L
STGM_SHARE_DENY_READ 0x00000030L
STGM_SHARE_DENY_WRITE 0x00000020L
STGM_SHARE_EXCLUSIVE 0x00000010L
STGM_PRIORITY 0x00040000L
作成 STGM_CREATE 0x00001000L
STGM_CONVERT 0x00020000L
STGM_FAILIFTHERE 0x00000000L
トランザクション処理 STGM_DIRECT 0x00000000L
STGM_TRANSACTED 0x00010000L
トランザクション処理のパフォーマンス STGM_NOSCRATCH 0x00100000L
STGM_NOSNAPSHOT 0x00200000L
直接 SWMR および簡易モード STGM_SIMPLE 0x08000000L
STGM_DIRECT_SWMR 0x00400000L
解放時に削除 STGM_DELETEONRELEASE 0x04000000L

STGM_READ

0x00000000L

オブジェクトが読み取り専用であること、つまり変更を加えられないことを示します。たとえば、ストリームオブジェクトを STGM_READ で開いた場合、ISequentialStream::Read メソッドは呼び出せますが、ISequentialStream::Write メソッドは呼び出せません。同様に、ストレージオブジェクトを STGM_READ で開いた場合、IStorage::OpenStream メソッドと IStorage::OpenStorage メソッドは呼び出せますが、IStorage::CreateStream メソッドと IStorage::CreateStorage メソッドは呼び出せません。

STGM_WRITE

0x00000001L

オブジェクトへの変更を保存できるようにしますが、そのデータへのアクセスは許可しません。提供されている IPropertyStorage および IPropertySetStorage インターフェイスの実装は、この書き込み専用モードをサポートしていません。

STGM_READWRITE

0x00000002L

オブジェクトのデータへのアクセスと変更を可能にします。たとえば、ストリームオブジェクトをこのモードで作成または開いた場合、IStream::ReadIStream::Write の両方を呼び出せます。この定数は、STGM_WRITESTGM_READ の単純なビット単位の OR 演算ではないことに注意してください。

STGM_SHARE_DENY_NONE

0x00000040L

以降にオブジェクトを開く際に、読み取りアクセスも書き込みアクセスも拒否しないことを指定します。共有グループのフラグを 1 つも指定しない場合は、このフラグが指定されたものと見なされます。

STGM_SHARE_DENY_READ

0x00000030L

他のユーザーが以降にオブジェクトを STGM_READ モードで開くことを禁止します。通常はルートストレージオブジェクトに対して使用します。

STGM_SHARE_DENY_WRITE

0x00000020L

他のユーザーが以降にオブジェクトを STGM_WRITE または STGM_READWRITE アクセスで開くことを禁止します。トランザクションモードでは、STGM_SHARE_DENY_WRITE または STGM_SHARE_EXCLUSIVE による共有はスナップショットを必要としないため、パフォーマンスが大幅に向上します。トランザクション処理の詳細については、「解説」セクションを参照してください。

STGM_SHARE_EXCLUSIVE

0x00000010L

他のユーザーが以降にオブジェクトをどのモードでも開けないようにします。この値は、STGM_SHARE_DENY_READSTGM_SHARE_DENY_WRITE の単純なビット単位の OR 演算ではないことに注意してください。トランザクションモードでは、STGM_SHARE_DENY_WRITE または STGM_SHARE_EXCLUSIVE による共有はスナップショットを必要としないため、パフォーマンスが大幅に向上します。トランザクション処理の詳細については、「解説」セクションを参照してください。

STGM_PRIORITY

0x00040000L

直近にコミットされたバージョンに対する排他アクセスでストレージオブジェクトを開きます。そのため、優先 (priority) モードで開いている間は、他のユーザーはそのオブジェクトへの変更をコミットできません。コピー操作のパフォーマンスは向上しますが、他のユーザーによるコミットを妨げることになります。優先モードでオブジェクトを開いたままにする時間は最小限にしてください。優先モードでは STGM_DIRECTSTGM_READ を指定する必要があり、STGM_DELETEONRELEASE は指定できません。STGM_DELETEONRELEASE は、StgCreateStorageEx などでルートオブジェクトを作成する場合にのみ有効です。StgOpenStorageEx などで既存のルートオブジェクトを開く場合には無効です。また、IStorage::OpenStorage などでサブ要素を作成または開く場合にも無効です。

STGM_CREATE

0x00001000L

新しいオブジェクトで置き換える前に、既存のストレージオブジェクトまたはストリームを削除することを示します。このフラグを指定した場合、既存のオブジェクトの削除に成功したときにのみ新しいオブジェクトが作成されます。

このフラグは、次のものを作成しようとするときに使用します。

  • ディスク上にストレージオブジェクトを作成しようとしたが、同じ名前のファイルが存在する場合。
  • ストレージオブジェクト内にオブジェクトを作成しようとしたが、指定した名前のオブジェクトが存在する場合。
  • バイト配列オブジェクトを作成しようとしたが、指定した名前のものが存在する場合。

このフラグは、StgOpenStorageExIStorage::OpenStream などの開く操作では使用できません。

STGM_CONVERT

0x00020000L

"Contents" という名前のストリームに既存のデータを保持したまま、新しいオブジェクトを作成します。ストレージオブジェクトまたはバイト配列の場合、既存のファイルまたはバイト配列が階層化されたストレージオブジェクトを現在含んでいるかどうかにかかわらず、古いデータはストリームとして整形されます。このフラグは、ルートストレージオブジェクトを作成するときにのみ使用できます。ストレージオブジェクト内では使用できません。たとえば、IStorage::CreateStream では使用できません。また、このフラグと STGM_DELETEONRELEASE フラグを同時に使用することもできません。

STGM_FAILIFTHERE

0x00000000L

指定した名前のオブジェクトが既に存在する場合、作成操作を失敗させます。この場合、STG_E_FILEALREADYEXISTS が返されます。これは既定の作成モードです。つまり、他の作成フラグを指定しない場合は、STGM_FAILIFTHERE が指定されたものと見なされます。

STGM_DIRECT

0x00000000L

直接 (direct) モードでは、ストレージ要素またはストリーム要素への変更が発生するたびに書き込まれることを示します。STGM_DIRECTSTGM_TRANSACTED のどちらも指定しない場合は、これが既定になります。

STGM_TRANSACTED

0x00010000L

トランザクションモードでは、変更がバッファーに蓄積され、明示的なコミット操作が呼び出された場合にのみ書き込まれることを示します。変更を破棄するには、IStreamIStorage、または IPropertyStorage インターフェイスの Revert メソッドを呼び出します。COM 複合ファイルによる IStorage の実装は、トランザクション処理されたストリームをサポートしていません。つまり、ストリームは直接モードでのみ開くことができ、その変更を元に戻すことはできませんが、トランザクション処理されたストレージはサポートされます。同様に、IPropertySetStorage の複合ファイル実装、スタンドアロン実装、および NTFS ファイルシステム実装も、トランザクション処理された単純なプロパティセットをサポートしていません。これらのプロパティセットはストリームに格納されるためです。ただし、IPropertySetStorage::CreategrfFlags パラメーターに PROPSETFLAG_NONSIMPLE フラグを指定することで作成できる非単純プロパティセットのトランザクション処理はサポートされます。

STGM_NOSCRATCH

0x00100000L

トランザクションモードでは通常、Commit メソッドが呼び出されるまで変更を保存するために一時的なスクラッチファイルが使用されることを示します。STGM_NOSCRATCH を指定すると、そのために新しいファイルを作成する代わりに、元のファイルの未使用部分を作業領域として使用できます。これは元のファイル内のデータには影響せず、場合によってはパフォーマンスの向上につながります。このフラグを STGM_TRANSACTED と併せて指定せずに使用することはできません。また、このフラグはルートを開くときにのみ使用できます。NoScratch モードの詳細については、「解説」セクションを参照してください。

STGM_NOSNAPSHOT

0x00200000L

このフラグは、ストレージオブジェクトを STGM_TRANSACTED を指定し、かつ STGM_SHARE_EXCLUSIVE または STGM_SHARE_DENY_WRITE を指定せずに開くときに使用します。この場合、STGM_NOSNAPSHOT を指定すると、システム提供の実装がファイルのスナップショットコピーを作成しなくなります。代わりに、ファイルへの変更はファイルの末尾に書き込まれます。コミット時に統合が実行され、かつそのファイルへの書き込み側が 1 つだけである場合を除き、未使用領域は回収されません。ファイルをスナップショットなしモードで開いている場合、STGM_NOSNAPSHOT を指定せずに別の開く操作を実行することはできません。このフラグは、ルートを開く操作でのみ使用できます。NoSnapshot モードの詳細については、「解説」セクションを参照してください。

STGM_SIMPLE

0x08000000L

限定的ではあるものの頻繁に使用されるケースにおいて、複合ファイルのより高速な実装を提供します。詳細については、「解説」セクションを参照してください。

STGM_DIRECT_SWMR

0x00400000L

シングルライター/マルチリーダーのファイル操作を直接モードでサポートします。詳細については、「解説」セクションを参照してください。

STGM_DELETEONRELEASE

0x04000000L

ルートストレージオブジェクトが解放されたときに、基になるファイルを自動的に破棄することを示します。この機能は一時ファイルの作成に特に便利です。このフラグは、StgCreateStorageEx などでルートオブジェクトを作成するときにのみ使用できます。StgOpenStorageEx などでルートオブジェクトを開くときや、IStorage::CreateStream などでサブ要素を作成または開くときには無効です。また、このフラグと STGM_CONVERT フラグを同時に使用することもできません。

解説(Remarks)

これらのフラグは組み合わせて使用できますが、関連するフラグの各グループから選択できるのは 1 つだけです。通常、これらの定数を使用するすべての関数およびメソッドでは、アクセスグループと共有グループからそれぞれ 1 つのフラグを指定する必要があります。他のグループのフラグは省略可能です。

トランザクションモード

STGM_DIRECT フラグを指定する場合、アクセスグループと共有グループから指定できるのは、次の組み合わせのいずれか 1 つだけです。

    STGM_READ      | STGM_SHARE_DENY_WRITE
    STGM_READWRITE | STGM_SHARE_EXCLUSIVE
    STGM_READ      | STGM_PRIORITY

STGM_TRANSACTED を指定しない場合は直接モードが暗黙的に適用されることに注意してください。つまり、STGM_DIRECTSTGM_TRANSACTED のどちらも指定しない場合は、STGM_DIRECT が指定されたものと見なされます。

STGM_TRANSACTED フラグを指定すると、オブジェクトはトランザクションモードで作成または開かれます。このモードでは、オブジェクトへの変更はコミットされるまで保持されません。たとえば、トランザクション処理されたストレージオブジェクトへの変更は、IStorage::Commit メソッドが呼び出されるまで永続化されません。Commit メソッドを呼び出す前にストレージオブジェクトが解放された場合 (最終解放)、または IStorage::Revert メソッドが呼び出された場合、そのストレージオブジェクトへの変更は失われます。

オブジェクトをトランザクションモードで作成または開いた場合、実装は必要に応じて更新を取り消せるように、元のデータと更新内容の両方を保持しなければなりません。これは通常、コミットされるまで変更をスクラッチ領域に書き込むか、直近にコミットされたデータのコピー (スナップショット) を作成することによって実現されます。

ルートストレージオブジェクトをトランザクションモードで開く場合、STGM_NOSCRATCH フラグと STGM_NOSNAPSHOT フラグによって、スクラッチデータとスナップショットコピーの配置場所と動作を制御し、パフォーマンスを最適化できます。(ルートストレージオブジェクトは、たとえば StgOpenStorageEx 関数から取得されます。IStorage::OpenStorage メソッドから取得されるストレージオブジェクトはサブストレージオブジェクトです。) 通常、スクラッチデータとスナップショットは、ストレージとは別の一時ファイルに格納されます。

これらのフラグの効果は、ルートストレージにアクセスする読み取り側および書き込み側の数によって異なります。

「シングルライター」のケースでは、トランザクションモードのストレージオブジェクトが書き込みアクセスで開かれ、そのファイルへの他のアクセスは存在しません。つまり、ファイルは STGM_TRANSACTEDSTGM_WRITE または STGM_READWRITE のアクセス、および STGM_SHARE_EXCLUSIVE の共有で開かれます。この場合、ストレージオブジェクトへの変更はスクラッチ領域に書き込まれます。それらの変更がコミットされると、元のストレージにコピーされます。したがって、ストレージオブジェクトに実際の変更が加えられていなければ、不要なデータ転送は発生しません。

「マルチライター」のケースでは、トランザクション処理されたストレージオブジェクトが書き込みアクセスで開かれますが、他の書き込み側を許可する形で共有されます。つまり、ストレージオブジェクトは STGM_TRANSACTEDSTGM_WRITE または STGM_READWRITE のアクセス、および STGM_SHARE_DENY_READ の共有で開かれます。代わりに STGM_SHARE_DENY_NONE の共有を指定した場合は、「マルチライター、マルチリーダー」のケースになります。これらのケースでは、開く操作の際に元のデータのスナップショットが作成されます。そのため、ストレージに実際の変更が加えられなくても、また実際に別の書き込み側が同時に開かなくても、開く際にデータ転送が必要になります。その結果、ストレージオブジェクトを STGM_SHARE_DENY_WRITE モードまたは STGM_SHARE_EXCLUSIVE モードで開くと、オープン時の最良のパフォーマンスが得られます。複数の書き込み側が存在する場合に変更がどのようにコミットされるかの詳細については、IStorage::Commit を参照してください。

「シングルライター、マルチリーダー」のケースでは、トランザクション処理されたストレージオブジェクトが書き込みアクセスで開かれますが、読み取り側と共有されます。つまり、書き込み側はストレージオブジェクトを STGM_TRANSACTEDSTGM_READWRITE または STGM_WRITE のアクセス、および STGM_SHARE_DENY_WRITE の共有で開きます。読み取り側はストレージを STGM_TRANSACTEDSTGM_READ のアクセス、および STGM_SHARE_DENY_NONE の共有で開きます。この場合、書き込み側は未コミットの変更を格納するためにスクラッチ領域を使用します。上記のケースと同様に、読み取り側はデータのスナップショットコピーが作成される間、オープン時のパフォーマンス低下を被ります。

通常、スクラッチ領域は元のデータとは別の一時ファイルです。変更が元のファイルにコミットされる際には、その一時ファイルからデータを転送しなければなりません。このデータ転送を回避するには、STGM_NOSCRATCH フラグを指定します。このフラグを指定すると、別個の一時ファイルではなく、ストレージオブジェクトファイルの一部がスクラッチ領域として使用されます。その結果、必要なデータ転送がわずかで済むため、変更のコミットを高速に実行できます。欠点として、元のデータとスクラッチ領域の両方を収められる大きさまで拡張する必要があるため、ストレージファイルが本来よりも大きくなる可能性があります。データを統合してこの不要な領域を削除するには、STGM_NOSCRATCH フラグを設定せずに、ルートストレージをトランザクションモードで開き直します。その後、STGC_CONSOLIDATE フラグを設定して IStorage::Commit を呼び出します。

スナップショット領域も、スクラッチ領域と同様に通常は一時ファイルであり、これも STGM フラグで制御できます。STGM_NOSNAPSHOT フラグを指定すると、別個の一時スナップショットファイルは作成されません。代わりに、オブジェクトごとに 1 つ以上の書き込み側が存在する場合でも、元のデータが変更されることはありません。変更がコミットされるとファイルに追加されますが、元のデータはそのまま残ります。このモードは、開く操作の際にスナップショットを作成する必要がなくなり実行時間が短縮されるため、効率が向上します。ただし、ファイル内のデータが上書きされることは決してないため、このモードを使用するとストレージファイルが非常に大きくなる可能性があります。NoSnapshot モードで開いたファイルのサイズに制限はありません。

直接モードでのシングルライター/マルチリーダー

前述のとおり、ストレージオブジェクトをトランザクションモードで開けば、1 つの書き込み側と複数の読み取り側を持つことができます。STGM_DIRECT_SWMR フラグを指定すれば、直接モードでもシングルライター/マルチリーダーを実現できます。

STGM_DIRECT_SWMR モードでは、ある呼び出し元がオブジェクトを読み取り/書き込みアクセスで開いている間に、他の呼び出し元が同時にそのファイルを読み取り専用アクセスで開くことができます。このフラグを STGM_TRANSACTED フラグと組み合わせて使用することはできません。このモードでは、書き込み側は次のフラグでオブジェクトを開きます。

STGM_DIRECT_SWMR | STGM_READWRITE | STGM_SHARE_DENYWRITE

また、各読み取り側は次のフラグでオブジェクトを開きます。

STGM_DIRECT_SWMR | STGM_READ | STGM_SHARE_DENY_NONE

このモードでストレージオブジェクトを変更するには、書き込み側がそのオブジェクトへの排他アクセスを取得する必要があります。これは、すべての読み取り側がオブジェクトを閉じた時点で可能になります。書き込み側は、この排他アクセスを取得するために IDirectWriterLock インターフェイスを使用します。

簡易モード

簡易モード (STGM_SIMPLE) は、完全な保存操作を実行するアプリケーションに適しています。効率的ですが、次の制約があります。

マーシャリングとは、リモートプロシージャコール (RPC) 内で、インターフェイスメソッドのパラメーターをスレッド境界またはプロセス境界を越えて送信するために、パッケージ化および展開する処理のことです。詳細については、Marshaling Details および Interface Marshaling を参照してください。

簡易モードで作成 (Create) 操作によってストレージオブジェクトを取得した場合は、次のようになります。

簡易モードで開く (Open) 操作によってストレージオブジェクトを取得した場合は、次のようになります。

簡易モードではないストレージオブジェクトによってストレージ要素が変更された場合、その要素を再び簡易モードで開くことはできなくなるので注意してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)

各言語での定義

列挙メンバーの定義。HSP タブは #define global(値は16進)。

typedef enum STGM : unsigned int {
    STGM_DIRECT = 0,
    STGM_TRANSACTED = 65536,
    STGM_SIMPLE = 134217728,
    STGM_READ = 0,
    STGM_WRITE = 1,
    STGM_READWRITE = 2,
    STGM_SHARE_DENY_NONE = 64,
    STGM_SHARE_DENY_READ = 48,
    STGM_SHARE_DENY_WRITE = 32,
    STGM_SHARE_EXCLUSIVE = 16,
    STGM_PRIORITY = 262144,
    STGM_DELETEONRELEASE = 67108864,
    STGM_NOSCRATCH = 1048576,
    STGM_CREATE = 4096,
    STGM_CONVERT = 131072,
    STGM_FAILIFTHERE = 0,
    STGM_NOSNAPSHOT = 2097152,
    STGM_DIRECT_SWMR = 4194304
} STGM;
[Flags]
public enum STGM : uint
{
    STGM_DIRECT = 0,
    STGM_TRANSACTED = 65536,
    STGM_SIMPLE = 134217728,
    STGM_READ = 0,
    STGM_WRITE = 1,
    STGM_READWRITE = 2,
    STGM_SHARE_DENY_NONE = 64,
    STGM_SHARE_DENY_READ = 48,
    STGM_SHARE_DENY_WRITE = 32,
    STGM_SHARE_EXCLUSIVE = 16,
    STGM_PRIORITY = 262144,
    STGM_DELETEONRELEASE = 67108864,
    STGM_NOSCRATCH = 1048576,
    STGM_CREATE = 4096,
    STGM_CONVERT = 131072,
    STGM_FAILIFTHERE = 0,
    STGM_NOSNAPSHOT = 2097152,
    STGM_DIRECT_SWMR = 4194304,
}
<Flags>
Public Enum STGM As UInteger
    STGM_DIRECT = 0
    STGM_TRANSACTED = 65536
    STGM_SIMPLE = 134217728
    STGM_READ = 0
    STGM_WRITE = 1
    STGM_READWRITE = 2
    STGM_SHARE_DENY_NONE = 64
    STGM_SHARE_DENY_READ = 48
    STGM_SHARE_DENY_WRITE = 32
    STGM_SHARE_EXCLUSIVE = 16
    STGM_PRIORITY = 262144
    STGM_DELETEONRELEASE = 67108864
    STGM_NOSCRATCH = 1048576
    STGM_CREATE = 4096
    STGM_CONVERT = 131072
    STGM_FAILIFTHERE = 0
    STGM_NOSNAPSHOT = 2097152
    STGM_DIRECT_SWMR = 4194304
End Enum
import enum

class STGM(enum.IntFlag):
    STGM_DIRECT = 0
    STGM_TRANSACTED = 65536
    STGM_SIMPLE = 134217728
    STGM_READ = 0
    STGM_WRITE = 1
    STGM_READWRITE = 2
    STGM_SHARE_DENY_NONE = 64
    STGM_SHARE_DENY_READ = 48
    STGM_SHARE_DENY_WRITE = 32
    STGM_SHARE_EXCLUSIVE = 16
    STGM_PRIORITY = 262144
    STGM_DELETEONRELEASE = 67108864
    STGM_NOSCRATCH = 1048576
    STGM_CREATE = 4096
    STGM_CONVERT = 131072
    STGM_FAILIFTHERE = 0
    STGM_NOSNAPSHOT = 2097152
    STGM_DIRECT_SWMR = 4194304
// STGM (flags)
pub const STGM_DIRECT: u32 = 0;
pub const STGM_TRANSACTED: u32 = 65536;
pub const STGM_SIMPLE: u32 = 134217728;
pub const STGM_READ: u32 = 0;
pub const STGM_WRITE: u32 = 1;
pub const STGM_READWRITE: u32 = 2;
pub const STGM_SHARE_DENY_NONE: u32 = 64;
pub const STGM_SHARE_DENY_READ: u32 = 48;
pub const STGM_SHARE_DENY_WRITE: u32 = 32;
pub const STGM_SHARE_EXCLUSIVE: u32 = 16;
pub const STGM_PRIORITY: u32 = 262144;
pub const STGM_DELETEONRELEASE: u32 = 67108864;
pub const STGM_NOSCRATCH: u32 = 1048576;
pub const STGM_CREATE: u32 = 4096;
pub const STGM_CONVERT: u32 = 131072;
pub const STGM_FAILIFTHERE: u32 = 0;
pub const STGM_NOSNAPSHOT: u32 = 2097152;
pub const STGM_DIRECT_SWMR: u32 = 4194304;
// STGM
const (
	STGM_DIRECT uint32 = 0
	STGM_TRANSACTED uint32 = 65536
	STGM_SIMPLE uint32 = 134217728
	STGM_READ uint32 = 0
	STGM_WRITE uint32 = 1
	STGM_READWRITE uint32 = 2
	STGM_SHARE_DENY_NONE uint32 = 64
	STGM_SHARE_DENY_READ uint32 = 48
	STGM_SHARE_DENY_WRITE uint32 = 32
	STGM_SHARE_EXCLUSIVE uint32 = 16
	STGM_PRIORITY uint32 = 262144
	STGM_DELETEONRELEASE uint32 = 67108864
	STGM_NOSCRATCH uint32 = 1048576
	STGM_CREATE uint32 = 4096
	STGM_CONVERT uint32 = 131072
	STGM_FAILIFTHERE uint32 = 0
	STGM_NOSNAPSHOT uint32 = 2097152
	STGM_DIRECT_SWMR uint32 = 4194304
)
const
  STGM_DIRECT = 0;
  STGM_TRANSACTED = 65536;
  STGM_SIMPLE = 134217728;
  STGM_READ = 0;
  STGM_WRITE = 1;
  STGM_READWRITE = 2;
  STGM_SHARE_DENY_NONE = 64;
  STGM_SHARE_DENY_READ = 48;
  STGM_SHARE_DENY_WRITE = 32;
  STGM_SHARE_EXCLUSIVE = 16;
  STGM_PRIORITY = 262144;
  STGM_DELETEONRELEASE = 67108864;
  STGM_NOSCRATCH = 1048576;
  STGM_CREATE = 4096;
  STGM_CONVERT = 131072;
  STGM_FAILIFTHERE = 0;
  STGM_NOSNAPSHOT = 2097152;
  STGM_DIRECT_SWMR = 4194304;
// STGM
pub const STGM_DIRECT: u32 = 0;
pub const STGM_TRANSACTED: u32 = 65536;
pub const STGM_SIMPLE: u32 = 134217728;
pub const STGM_READ: u32 = 0;
pub const STGM_WRITE: u32 = 1;
pub const STGM_READWRITE: u32 = 2;
pub const STGM_SHARE_DENY_NONE: u32 = 64;
pub const STGM_SHARE_DENY_READ: u32 = 48;
pub const STGM_SHARE_DENY_WRITE: u32 = 32;
pub const STGM_SHARE_EXCLUSIVE: u32 = 16;
pub const STGM_PRIORITY: u32 = 262144;
pub const STGM_DELETEONRELEASE: u32 = 67108864;
pub const STGM_NOSCRATCH: u32 = 1048576;
pub const STGM_CREATE: u32 = 4096;
pub const STGM_CONVERT: u32 = 131072;
pub const STGM_FAILIFTHERE: u32 = 0;
pub const STGM_NOSNAPSHOT: u32 = 2097152;
pub const STGM_DIRECT_SWMR: u32 = 4194304;
const
  STGM_DIRECT* = 0
  STGM_TRANSACTED* = 65536
  STGM_SIMPLE* = 134217728
  STGM_READ* = 0
  STGM_WRITE* = 1
  STGM_READWRITE* = 2
  STGM_SHARE_DENY_NONE* = 64
  STGM_SHARE_DENY_READ* = 48
  STGM_SHARE_DENY_WRITE* = 32
  STGM_SHARE_EXCLUSIVE* = 16
  STGM_PRIORITY* = 262144
  STGM_DELETEONRELEASE* = 67108864
  STGM_NOSCRATCH* = 1048576
  STGM_CREATE* = 4096
  STGM_CONVERT* = 131072
  STGM_FAILIFTHERE* = 0
  STGM_NOSNAPSHOT* = 2097152
  STGM_DIRECT_SWMR* = 4194304
enum STGM : uint {
    STGM_DIRECT = 0,
    STGM_TRANSACTED = 65536,
    STGM_SIMPLE = 134217728,
    STGM_READ = 0,
    STGM_WRITE = 1,
    STGM_READWRITE = 2,
    STGM_SHARE_DENY_NONE = 64,
    STGM_SHARE_DENY_READ = 48,
    STGM_SHARE_DENY_WRITE = 32,
    STGM_SHARE_EXCLUSIVE = 16,
    STGM_PRIORITY = 262144,
    STGM_DELETEONRELEASE = 67108864,
    STGM_NOSCRATCH = 1048576,
    STGM_CREATE = 4096,
    STGM_CONVERT = 131072,
    STGM_FAILIFTHERE = 0,
    STGM_NOSNAPSHOT = 2097152,
    STGM_DIRECT_SWMR = 4194304,
}
#define global STGM_DIRECT           0x0
#define global STGM_TRANSACTED       0x10000
#define global STGM_SIMPLE           0x8000000
#define global STGM_READ             0x0
#define global STGM_WRITE            0x1
#define global STGM_READWRITE        0x2
#define global STGM_SHARE_DENY_NONE  0x40
#define global STGM_SHARE_DENY_READ  0x30
#define global STGM_SHARE_DENY_WRITE 0x20
#define global STGM_SHARE_EXCLUSIVE  0x10
#define global STGM_PRIORITY         0x40000
#define global STGM_DELETEONRELEASE  0x4000000
#define global STGM_NOSCRATCH        0x100000
#define global STGM_CREATE           0x1000
#define global STGM_CONVERT          0x20000
#define global STGM_FAILIFTHERE      0x0
#define global STGM_NOSNAPSHOT       0x200000
#define global STGM_DIRECT_SWMR      0x400000
; ※フラグ列挙型。ビットORで組み合わせ可(例: FOO|BAR)。