IStorage::OpenStream 方法 (objidl.h)

OpenStream 方法以指定的访问模式打开此存储对象中的现有流对象。

语法

HRESULT OpenStream(
  [in]  const OLECHAR *pwcsName,
  [in]  void          *reserved1,
  [in]  DWORD         grfMode,
  [in]  DWORD         reserved2,
  [out] IStream       **ppstm
);

参数

[in] pwcsName

指向宽字符 null 结尾的 Unicode 字符串的指针,该字符串包含要打开的流的名称。 000 到 01f 字符(用作流/存储名称的第一个字符)保留供 OLE 使用。 这是复合文件限制,而不是结构化存储限制。

[in] reserved1

保留供将来使用;必须为 NULL

[in] grfMode

指定要分配给开放流的访问模式。 有关可能值的详细信息和说明,请参阅 STGM 常量。 在复合文件实现中调用此方法时,所选的其他模式必须至少指定STGM_SHARE_EXCLUSIVE。

[in] reserved2

留待将来使用;必须为零。

[out] ppstm

指向 IStream 指针变量的指针,该变量接收指向新打开的流对象的接口指针。 如果发生错误,必须将 *ppstm 设置为 NULL

返回值

此方法可以返回其中一个值。

返回代码 说明
S_OK 已成功打开流。
E_PENDING 仅异步存储:部分或全部流数据当前不可用。
STG_E_ACCESSDENIED 没有足够的权限打开流。
STG_E_FILENOTFOUND 具有指定名称的流不存在。
STG_E_INSUFFICIENTMEMORY 由于内存不足,流未打开。
STG_E_INVALIDFLAG grfMode 参数指定的值不是有效的 STGM 常量值。
STG_E_INVALIDFUNCTION 不支持 grfMode 参数中的指定标志组合;例如,在没有 STGM_SHARE_EXCLUSIVE 标志的情况下调用此方法时。
STG_E_INVALIDNAME pwcsName 的值无效。
STG_E_INVALIDPOINTER 为流对象指定的指针无效。
STG_E_INVALIDPARAMETER 其中一个参数无效。
STG_E_REVERTED 存储对象在事务树中的上方还原操作已失效。
STG_E_TOOMANYOPENFILES 由于打开的文件太多,因此未打开流。

注解

IStorage::OpenStreamgrfMode 中指定的访问模式打开此存储对象中的现有流对象。 grfMode 中可以授予的权限有一些限制。 例如,对此存储对象的权限限制对其流的权限。 通常,对流的访问限制需要比其父存储上的访问限制更严格。 必须使用STGM_SHARE_EXCLUSIVE打开复合文件流。

要求

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

另请参阅

IStorage - 复合文件实现

IStorage::CreateStream

IStream