getClassFile 函数 (objbase.h)
返回与指定文件名关联的 CLSID。
语法
HRESULT GetClassFile(
[in] LPCOLESTR szFilename,
[out] CLSID *pclsid
);
参数
[in] szFilename
指向要为其请求关联 CLSID 的文件名的指针。
[out] pclsid
指向返回时写入关联 CLSID 的位置的指针。
返回值
此函数可以返回任何文件系统错误以及以下值。
返回代码 | 说明 |
---|---|
|
已成功检索 CLSID。 |
|
无法打开指定的文件名。 |
|
注册表中的指定扩展无效。 |
注解
给定文件名后, GetClassFile 会查找与该文件关联的 CLSID。 它的使用示例包括 OleCreateFromFile 函数,该函数传递文件名并需要关联的 CLSID;在 IMoniker::BindToObject 的 OLE 实现中,当激活基于文件的文档的链接时,调用 GetClassFile 来查找可以打开该文件的对象应用程序。
GetClassFile 使用以下策略来确定适当的 CLSID:
- 如果文件包含存储对象(由调用 StgIsStorageFile 函数确定), GetClassFile 将返回使用 IStorage::SetClass 方法编写的 CLSID。
-
如果文件不是存储对象, GetClassFile 会尝试将文件中的各个位与注册表中的模式匹配。 注册表中的模式可以包含表单的一系列条目:
entry = offset, cb, mask, value
偏移项的值是文件开头或末尾的偏移量,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} 将与此文件相关联。
- 如果上述策略失败, GetClassFile 在注册表中搜索与文件名的 .ext 部分对应的 文件扩展名 键。 如果数据库条目包含有效的 CLSID, 则 GetClassFile 将返回该 CLSID。
- 如果所有策略都失败,函数将返回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 () |