GetClassFile 関数 (objbase.h)

指定したファイル名に関連付けられている CLSID を返します。

構文

HRESULT GetClassFile(
  [in]  LPCOLESTR szFilename,
  [out] CLSID     *pclsid
);

パラメーター

[in] szFilename

関連付けられた CLSID を要求するファイル名へのポインター。

[out] pclsid

関連する CLSID が戻り時に書き込まれる場所へのポインター。

戻り値

この関数は、ファイル システム エラーと次の値を返すことができます。

リターン コード 説明
S_OK
CLSID が正常に取得されました。
MK_E_CANTOPENFILE
指定したファイル名を開くことができません。
MK_E_INVALIDEXTENSION
レジストリで指定された拡張機能が無効です。

注釈

ファイル名を指定すると、 GetClassFile はそのファイルに関連付けられている CLSID を検索します。 その使用例は、ファイル名が渡され、関連付けられた CLSID が必要な OleCreateFromFile 関数と、 IMoniker::BindToObject の OLE 実装で使用されます。この関数は、ファイル ベースのドキュメントへのリンクがアクティブになると、 GetClassFile を呼び出してファイルを開くことができるオブジェクト アプリケーションを見つけます。

GetClassFile では、次の方法を使用して適切な CLSID を決定します。

  1. StgIsStorageFile 関数の呼び出しによって決定されるストレージ オブジェクトがファイルに含まれている場合、GetClassFileIStorage::SetClass メソッドで書き込まれた CLSID を返します。
  2. ファイルがストレージ オブジェクトでない場合、 GetClassFile は、ファイル内のさまざまなビットをレジストリ内のパターンと照合しようとします。 レジストリのパターンには、フォームの一連のエントリを含めることができます。

    entry = offset, cb, mask, value

    オフセット項目の値は、ファイルの先頭または末尾からのオフセットであり、cb 項目はバイト単位の長さです。 これら 2 つの値は、ファイル内の特定のバイト範囲を表します。 (オフセット項目の負の値は、ファイルの末尾から解釈されます)。 マスク値は、offset および cb で指定されたバイト範囲で論理 AND 演算を実行するために使用されるビットマスクです。 論理 AND 演算の結果が 項目と比較されます。 マスクを省略した場合は、すべてと見なされます。

    レジストリ内の各パターンは、データベース内のパターンの順序でファイルと比較されます。 各値項目が AND 操作の結果と一致する最初のパターンによって、ファイルの CLSID が決まります。 たとえば、レジストリの次のエントリに含まれるパターンでは、最初の 4 バイトを AB CD 12 34 にし、最後の 4 バイトを FE FE FE FE にする必要があります。

    HKEY_CLASSES_ROOT 
       FileType
          {12345678-0000-0001-C000-000000000095}
             0 = 0, 4, FFFFFFFF, ABCD1234 
             1 = -4, 4, , FEFEFEFE 

    ファイルにこのようなパターンが含まれている場合、CLSID {12345678-0000-0001-C000-00000000095} がこのファイルに関連付けられます。

  3. 上記の方法が失敗した場合、 GetClassFile、ファイル 名の .ext 部分に対応するレジストリ内のファイル拡張子キーを検索します。 データベース エントリに有効な CLSID が含まれている場合、 GetClassFile はその CLSID を返します。
  4. すべての戦略が失敗した場合、関数はMK_E_INVALIDEXTENSIONを返します。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー objbase.h
Library Ole32.lib
[DLL] Ole32.dll
API セット ext-ms-win-com-ole32-l1-1-5 (Windows 10 バージョン 10.0.15063 で導入)

こちらもご覧ください

WriteClassStg