IPropertySetStorage::Open 方法 (propidl.h)

Open 方法打开属性集存储对象中包含的属性集。

语法

HRESULT Open(
  [in]  REFFMTID         rfmtid,
  [in]  DWORD            grfMode,
  [out] IPropertyStorage **ppprstg
);

参数

[in] rfmtid

要打开的属性集 (FMTID) 的格式标识符。 有关平台 SDK 中已知和预定义的 FMTID 的详细信息,请参阅 预定义的属性集格式标识符

[in] grfMode

打开新创建的属性集的访问模式。 这些标志取自 STGM 常量。 以下“备注”部分介绍了可能使用的标志及其在此方法上下文中的含义。

[out] ppprstg

指向 IPropertyStorage 指针变量的指针,该变量接收指向请求的属性存储子对象的接口指针。

返回值

此方法支持E_UNEXPECTED的标准返回值,此外还支持以下各项:

注解

参数 grfMode 中指定了打开属性集的模式。 这些标志取自 STGM 常量,但对于此方法,法律值及其含义如下所示 (只有这些标志值的某些组合是合法的) 。

含义
STGM_DIRECT 打开属性集,无需额外的事务嵌套级别。 如果未) 指定STGM_DIRECT或STGM_TRANSACTED,则这是行为的默认 (。
STGM_TRANSACTED 打开属性集,该属性集具有额外的事务嵌套级别, (超出事务(如果有)的属性集,该属性集将存储对象) 。 事务处理模式仅适用于非简单属性集。 必须先通过调用 IPropertyStorage::Commit 提交属性集中的更改,然后才能对此属性集存储上的事务可见。
STGM_READ 打开具有读取访问权限的属性集。 属性集存储需要读取权限。
STGM_WRITE 打开具有写入访问权限的属性集。 并非所有 IPropertyStorage 的实现都支持此模式。
STGM_READWRITE 打开具有读取和写入访问权限的属性集。 请注意,此标志不是STGM_READ和STGM_WRITE值的二进制 OR。
STGM_SHARE_DENY_NONE 从此属性集存储中随后打开的属性集时,不会拒绝读取或写入访问。 (并非在所有实现中都可用。)
STGM_SHARE_DENY_READ 从此属性集存储中随后打开的属性集将被拒绝读取访问。 并非在所有实现中都可用。
STGM_SHARE_DENY_WRITE 来自此属性集存储的属性集的后续打开将被拒绝写入访问。 此值通常在事务处理模式下使用,以防止创建由多个用户打开的对象的不必要副本。 也就是说,如果指定了STGM_TRANSACTED,但未指定此值,则无论是否有后续打开,都进行快照。 因此,可以通过指定此值来提高性能。 并非在所有实现中都可用。
STGM_SHARE_EXCLUSIVE 无法从此属性集存储中随后打开属性集。 请注意,此值不是STGM_SHARE_DENY_READ和STGM_SHARE_DENY_WRITE元素的简单二进制 OR。
 

此方法受简单属性集的基础 IStorage::OpenStream (的约束) 或 IStorage::OpenStorage () 非简单属性集的约束。 有关简单和非简单属性集的详细信息,请参阅属性集的存储和Stream对象。 例如,使用 IPropertySetStorage-Compound File Implementation 时,必须将 grfMode 参数中的STGM_SHARE_EXCLUSIVE指定为 IPropertySetStorage::Open。 相反,如果使用 IPropertySetStorage-独立实现则 IPropertySetStorage::Open 受适用于调用方指定的 IStorage 的约束。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 propidl.h (包括 Objbase.h)
Library Uuid.lib
DLL Ole32.dll

另请参阅

EnumAll 示例

IPropertySetStorage

IPropertySetStorage::Create

PROPVARIANT

示例

WriteRead 示例