IStorage

概要

IStorage インタフェースは、構造化ストレージオブジェクトの生成と管理をサポートします。 構造化ストレージは単体ファイル内に、階層的なストレージを構成することを許可します。 これは、よく「ファイル内のファイルシステム」と表現されます。 構造化ストレージの構成要素は、ストレージとストリームです。 ストレージはディレクトリに類似し、ストリームはファイルに類似します。 構造化ストレージ内で、それらは主要なストレージオブジェクトとして、ネストされたストレージやストリームという形でサブストレージに含まれるでしょう。

ストレージはオブジェクトの構造を提供し、ストリームはデータを含んでいます。 データは IStream インタフェースによって操作されます。

アプリケーションは、ストレージオブジェクトのメモリ割り当ての開放を行うとき、IStorage ポインタを公開しなくてはなりません。 また、要素の日付や時間を変更するためのメソッドも存在します。

ストレージオブジェクトおよびその要素には、STGM 列挙体による値の設定によって決定されオープン可能となるいくつかの異なるモードがあります。 これはどのようにコミットされるかにあたります。 オブジェクトへの変更が内部に直接書き込まれるダイレクトモードや、明示的にコミットされるまでバッファに書き込まれるようにモードに設定することができます。 IStorage インタフェースは、変更をコミットされるまで、直前のコミット状態に戻すメソッドを提供します。 たとえば、ストリームが read-only モードまたはread/write モードで開かれる事ができます。 より詳しい情報は、STGM 列挙体の項を参照してください。

その他のメソッドについては、ストレージオブジェクトや STATSTG 構造体の要素を参照してください。

C#


[ComImport]
[Guid( "0000000B-0000-0000-C000-000000000046" )]
[InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
[ComVisible( false )]
public interface IStorage
{
    [PreserveSig]
        int CreateStream(
        string   pwcsName,
        STGM     grfMode,
        uint     reserved1,
        uint     reserved2,
    out IStream  ppstm );

    [PreserveSig]
        int OpenStream(
        string   pwcsName,
        IntPtr   reserved1,
        STGM     grfMode,
        uint     reserved2,
    out IStream  ppstm );

    [PreserveSig]
        int CreateStorage(
        string   pwcsName,
        STGM     grfMode,
        uint     reserved1,
        uint     reserved2,
    out IStorage ppstg );

    [PreserveSig]
        int OpenStorage(
        string   pwcsName,
        IStorage pstgPriority,
        STGM     grfMode,
        IntPtr   snbExclude,
        uint     reserved,
    out IStorage ppstg );

    void CopyTo(
        uint     ciidExclude,
        [In, MarshalAs( UnmanagedType.LPArray )]
    ref Guid[]   rgiidExclude,
        IntPtr   snbExclude,
        IStorage pstgDest );

    void MoveElementTo(
        string   pwcsName,
        IStorage pstgDest,
        string   pwcsNewName,
        STGMOVE  grfFlags );

    void Commit(
        STGC     grfCommitFlags );

    void Revert( );

    void EnumElements(
        uint         reserved1,
        IntPtr       reserved2,
        uint         reserved3,
    out IEnumSTATSTG ppenum );

    void DestroyElement(
        string    pwcsName );

    void RenameElement(
        string    pwcsOldName,
        string    pwcsNewName );

    void SetElementTimes(
        string    pwcsName,
    [In]
    ref FILETIME  pctime,
    [In]
    ref FILETIME  patime,
    [In]
    ref FILETIME  pmtime );

    void SetClass(
    [In]
    ref Guid      clsid );

    [PreserveSig]
        int SetStateBits(
        uint      grfStateBits,
        uint      grfMask );

    void Stat(
    out STATSTG   pstatstg,
        STATFLAG  grfStatFlag );
}
  

メンバ

CreateStream()

ストレージオブジェクトに含まれている指定された名前で、ストリームオブジェクトを生成し開きます。

OpenStream()

ストレージオブジェクト内に存在するストリームオブジェクトを開きます。 grfMode で指定されたアクセス権が必要です。

CreateStorage()

ストレージオブジェクト内に、新しいストレージオブジェクトを作成し開きます。

OpenStorage()

存在するストレージオブジェクトを、指定された名称・アクセスモードに従って開きます。

CopyTo()

ストレージオブジェクト内の開かれたストレージオブジェクトのエントリーコンテンツをコピーします。

MoveElementTo()

あるストレージオブジェクトから他のストレージオブジェクトに、サブストレージまたはストリームをコピーまたは移動します。

Commit()

親レベルに対して変更されたストレージオブジェクトに対して変更を反映します。

Revert()

最後のコミット操作以降に行われた、ストレージオブジェクトに対するすべての変更を破棄します。

EnumElements()

ストレージオブジェクト内に含まている、ストレージやストリームオブジェクトを列挙する事ができる IEnumSTATSTG 列挙オブジェクトを返します。

DestroyElement()

ストレージオブジェクトから、指定されたストレージまたはストリームを削除します。

RenameElement()

ストレージオブジェクトにある、指定されたストレージまたはストリームをリネームします。

SetElementTimes()

ファイルシステムでサポートされている場合、ストレージ要素の変更、更新、作成の時刻を設定します。

SetClass()

このストレージオブジェクトに 指定された CLSID を割り当てます。

SetStateBits()

このストレージオブジェクトに最大 32ビットのステート情報をストアします。

Stat()

この開かれたストレージオブジェクトの STATSTG 構造体を返します。

詳細

システムに明示的に新しいストレージを導入しない限り、通常はこのインタフェースを実装する必要はありません。 COM は、トランザクションアクセスをサポートする IStorage インタフェースを実装した複合ファイルを提供します。 COM は、IStorage インタフェースを実装した複合ファイルが簡易に扱えるヘルパ API 群も提供します。 CompoundFileImplementation を参照して下さい。

さらに

このインタフェースを使用するには、現在のストレージに含まれるサブストレージまたはストリームを管理している IStorage のメソッドをコールします。 このメソッドは、タイムスタンプや名前などを管理することと同様に、サブストレージやストリームの生成/再開/破棄を管理します。 また、トランザクションモードで開かれたストレージでは、変更のコミットや、前の版への復帰(revert)が可能です。 IStorage のメソッド群には、データの read / write は存在しません。 実際のデータを管理する IStorage に予約されているためです。 IStorageIStream のインタフェースは、ストレージオブジェクトやストレージの要素を操作するために使用され、 IPersistStorage インタフェースには、ストレージオブジェクトやその要素をディスクファイルにシリアライズするときにコールされるメソッドが含まれます。

必要環境

クライアント Windows 2000 Professional [desktop apps | Windows Store apps]
サーバー Windows 2000 Server [desktop apps | Windows Store apps]
ヘッダ Objidl.h
IDL Objidl.idl
LIB uid.lib
DLL Ole32.dll
IID IID_IStorage = 0000000B-0000-0000-C000-000000000046

参照

公式の情報は aa380015 を参照して下さい。