StgOpenStorageEx 関数 (coml2api.h)

StgOpenStorageEx 関数は、ファイル システム内の既存のルート ストレージ オブジェクトを開きます。 複合ファイルと通常のファイルを開くには、この関数を使用します。 新しいファイルを作成するには、 StgCreateStorageEx 関数を 使用します。

メモ 拡張機能を使用するには、 StgOpenStorage ではなく、すべての Windows 2000、Windows XP、および Windows Server 2003 アプリケーションで StgOpenStorageEx を呼び出す必要があります。 StgOpenStorage 関数は、Windows 2000 以前のアプリケーションとの互換性のために使用されます。
 

構文

HRESULT StgOpenStorageEx(
  [in]      const WCHAR          *pwcsName,
  [in]      DWORD                grfMode,
  [in]      DWORD                stgfmt,
  [in]      DWORD                grfAttrs,
  [in, out] STGOPTIONS           *pStgOptions,
  [in]      PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in]      REFIID               riid,
  [out]     void                 **ppObjectOpen
);

パラメーター

[in] pwcsName

ストレージ オブジェクトを含む null で終わる Unicode 文字列ファイルのパスへのポインター。 この文字列サイズは 、MAX_PATH 文字を超えることはできません。

Windows Server 2003 および Windows XP/2000: CreateFile 関数とは異なり、"\?" プレフィックスを使用してMAX_PATHの制限を超えることはできません。

[in] grfMode

新しいストレージ オブジェクトを開くアクセス モードを示す 値。 詳細については、「 STGM 定数」を参照してください。 呼び出し元が STGM_CREATE または STGM_CONVERTと共にトランザクション モードを指定した場合、ルート ストレージに対してコミット操作が呼び出されたときに上書きまたは変換が発生します。 ルート ストレージ オブジェクトに対して IStorage::Commit が呼び出されない場合、ファイルの以前の内容が復元されます。 STGM_CREATESTGM_CONVERTSTGM_NOSNAPSHOT フラグと組み合わせることはできません。これは、ファイルがトランザクション モードで上書きまたは変換されるときにスナップショットコピーが必要であるためです。

STGM_WRITEまたはSTGM_READWRITEにアクセスできるダイレクト モード (STGM_DIRECT) でストレージ オブジェクトを開く場合は、STGM_DIRECT_SWMR モードが指定されていない限り、共有モードをSTGM_SHARE_EXCLUSIVEする必要があります。 詳細については、「解説」を参照してください。 STGM_READにアクセスできるダイレクト モードでストレージ オブジェクトを開く場合、STGM_PRIORITYまたはSTGM_DIRECT_SWMRが指定されていない限り、共有モードはSTGM_SHARE_EXCLUSIVEまたはSTGM_SHARE_DENY_WRITEである必要があります。 詳細については、「解説」を参照してください。

ファイルを開くモードは、実装のパフォーマンスに影響を与える可能性があります。 詳細については、「 複合ファイルの実装の制限」を参照してください。

[in] stgfmt

ストレージ ファイルの形式を示す 値。 詳細については、 STGFMT 列挙を参照してください。

[in] grfAttrs

stgfmt パラメーターの値に依存する値。

STGFMT_DOCFILE はゼロ (0) または FILE_FLAG_NO_BUFFERINGにする必要があります。 この値の詳細については、「 CreateFile」を参照してください。 pStgOptions で指定されたファイルのセクター サイズが、基になるディスクの物理セクター サイズの整数倍数でない場合、この操作は失敗します。 stgfmt の他のすべての値は 0 である必要があります。

[in, out] pStgOptions

開かれたストレージ オブジェクトに関するデータを含む STGOPTIONS 構造体へのポインター。 pStgOptions パラメーターは、stgfmt パラメーターが STGFMT_DOCFILE に設定されている場合にのみ有効です。 stgOpenStorageEx を呼び出す前に、usVersion メンバーを設定する必要があります。 詳細については、 STGOPTIONS 構造体を参照してください。

[in] pSecurityDescriptor

予約;は 0 である必要があります。

[in] riid

返すインターフェイス ポインターの GUID を指定する 値。 IStorage インターフェイスを取得するIID_IStorageまたは IPropertySetStorage インターフェイスを取得するためのIID_IPropertySetStorageのヘッダー指定値を指定することもできます。

[out] ppObjectOpen

開かれたストレージ オブジェクト上のインターフェイスのポインターを受け取るインターフェイス ポインター変数のアドレス。操作が失敗した場合は NULL が 含まれます。

戻り値

この関数は、 HRESULT でラップされたファイル システム エラーまたはシステム エラーを返すこともできます。 詳細については、「 エラー処理戦略 」および「 不明なエラーの処理」を参照してください。

注釈

StgOpenStorageExStgOpenStorage 関数のスーパーセットであり、新しいコードで使用する必要があります。 構造化ストレージに対する今後の機能強化は、この関数を通じて公開される予定です。 サポートされているプラットフォームの詳細については、「要件」セクションを参照してください。

StgOpenStorageEx 関数は、grfMode パラメーターのアクセス モードに従って指定されたルート ストレージ オブジェクトを開き、成功した場合は ppObjectOpen パラメーターで開かれたストレージ オブジェクトのインターフェイス ポインターを提供します。 この関数を使用して、 IStorage 複合ファイルの実装IPropertySetStorage 複合ファイルの実装、または
IPropertySetStorage の NTFS ファイル システムの実装

ファイルを開くと、ファイルの種類とファイルが格納されているドライブの種類で指定した STGFMT フラグに応じて、構造化ストレージの実装が選択されます。

StgOpenStorageEx 関数を使用して、構造化ストレージ ドキュメントのルート ストレージ、またはプロパティ セットをサポートするすべてのファイルのプロパティ セット ストレージにアクセスします。 さまざまな STGFMT 値でサポートされているインターフェイス識別子 (ID) の詳細については、「 STGFMT」を参照してください。

NTFS プロパティ セットの実装にアクセスするためにこの関数を使用してファイルを開くと、特別な共有規則が適用されます。 詳細については、「 IPropertySetStorage-NTFS の実装」を参照してください。

複合ファイルをトランザクション モードで開く場合は、STGM_TRANSACTEDを指定し、読み取り専用モードで、STGM_READを指定することで、返されるストレージ オブジェクトを変更できます。 たとえば、 IStorage::CreateStream を呼び出す可能性があります。 ただし、 IStorage::Commit を呼び出すことで、これらの変更をコミットすることはできません。 そのため、このような変更は失われます。

この関数の grfMode パラメーターで、STGM_CREATESTGM_DELETEONRELEASE、またはSTGM_CONVERTフラグを使用することはできません。

サブストレージのないストレージ オブジェクトを保存するための単純モードをサポートするために、 StgOpenStorageEx 関数は grfMode パラメーターで有効なモードとして次の 2 つのフラグの組み合わせのいずれかを受け入れます。

    STGM_SIMPLE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE
    STGM_SIMPLE | STGM_READ | STGM_SHARE_EXCLUSIVE

シングル ライター、マルチリーダー、ダイレクト モードをサポートするために、最初のフラグの組み合わせはライターの有効な grfMode パラメーターです。 2 番目のフラグの組み合わせは、リーダーに対して有効です。

    STGM_DIRECT_SWMR | STGM_READWRITE | STGM_SHARE_DENY_WRITE
    STGM_DIRECT_SWMR | STGM_READ | STGM_SHARE_DENY_NONE

簡易モードとシングルライター/マルチリーダー モードの詳細については、「 STGM 定数」を参照してください。

メモ他のユーザーに対する書き込みアクセス許可を拒否せずに、トランザクション モードのストレージ オブジェクトを読み取りモードまたは書き込みモードで開く (たとえば、grfMode パラメーターでSTGM_SHARE_DENY_WRITEを指定する) 場合、時間がかかる場合があります。これは、StgOpenStorageEx 呼び出しでストレージ オブジェクト全体のスナップショットコピーを作成する必要があるためです。
 

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー coml2api.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

複合ファイル

IStorage

STGFMT

STGM 定数

STGOPTIONS

StgCreateDocfile

StgCreateStorageEx

StgOpenStorage