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。 它的使用示例包括 OleCreateFromFile 函数,该函数传递文件名并需要关联的 CLSID;在 IMoniker::BindToObject 的 OLE 实现中,当激活基于文件的文档的链接时,调用 GetClassFile 来查找可以打开该文件的对象应用程序。

GetClassFile 使用以下策略来确定适当的 CLSID:

  1. 如果文件包含存储对象(由调用 StgIsStorageFile 函数确定), GetClassFile 将返回使用 IStorage::SetClass 方法编写的 CLSID。
  2. 如果文件不是存储对象, GetClassFile 会尝试将文件中的各个位与注册表中的模式匹配。 注册表中的模式可以包含表单的一系列条目:

    entry = offsetcbmaskvalue

    偏移项的值是文件开头或末尾的偏移量,cb 项的长度(以字节为单位)。 这两个值表示文件中的特定字节范围。 (从文件) 末尾解释偏移项的负值。 掩码值是一个位掩码,用于使用偏移量cb 指定的字节范围执行逻辑 AND 操作。 逻辑 AND 操作的结果与 项进行比较。 如果省略 掩码 ,则假定为全部掩码。

    注册表中的每个模式都按数据库中的模式顺序与文件进行比较。 每个值项匹配 AND 操作结果的第一种模式决定了文件的 CLSID。 例如,注册表的以下条目中包含的模式要求前四个字节为 AB CD 12 34,最后四个字节为 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-000-00000000095} 将与此文件相关联。

  3. 如果上述策略失败, GetClassFile 在注册表中搜索与文件名的 .ext 部分对应的 文件扩展名 键。 如果数据库条目包含有效的 CLSID, 则 GetClassFile 将返回该 CLSID。
  4. 如果所有策略都失败,函数将返回MK_E_INVALIDEXTENSION。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 objbase.h
Library Ole32.lib
DLL Ole32.dll
API 集 Windows 10版本 10.0.15063 中引入的 ext-ms-win-com-ole32-l1-1-5 ()

另请参阅

WriteClassStg