IStream::LockRegion 方法 (objidl.h)
LockRegion 方法限制对流中指定字节范围的访问。 支持此功能是可选的,因为某些文件系统不提供此功能。
语法
HRESULT LockRegion(
[in] ULARGE_INTEGER libOffset,
[in] ULARGE_INTEGER cb,
[in] DWORD dwLockType
);
参数
[in] libOffset
指定范围开头的字节偏移量的整数。
[in] cb
指定要限制的范围长度的整数(以字节为单位)。
[in] dwLockType
指定请求访问范围的限制。
返回值
此方法可以返回其中一个值。
返回代码 | 说明 |
---|---|
S_OK | 指定的字节范围已锁定。 |
E_PENDING | 仅限异步存储:流的部分或全部数据当前不可用。 |
STG_E_INVALIDFUNCTION | 完全不支持锁定,或者不支持请求的特定类型的锁。 |
STG_E_LOCKVIOLATION | 支持请求的锁,但由于存在现有锁,因此无法授予该锁。 |
STG_E_REVERTED | 在事务树中,对象上方的还原操作已失效。 |
注解
可以扩展流的字节范围。 锁定流的扩展范围作为不同流实例之间的通信方法很有用,无需更改实际属于流的一部分的数据。
可支持三种类型的锁定:锁定以排除其他编写器,锁定以排除其他读取器或编写器,以及仅允许一个请求者获取给定范围的锁(通常是其他两种锁类型之一的别名)的锁定。 给定的流实例可能支持前两种类型之一,或者同时支持这两种类型。 锁类型由 dwLockType 指定,使用 LOCKTYPE 枚举中的值。
以后必须使用与 libOffset、cb 和 dwLockType 参数完全相同的值调用 IStream::UnlockRegion 来显式解锁使用 IStream::LockRegion 锁定的任何区域。 必须先解锁该区域,然后才能释放流。 两个相邻区域不能单独锁定,然后通过一次解锁调用解锁。
调用方备注
由于支持的锁定类型是可选的,并且可能因 IStream 的不同实现而异,因此必须提供代码来处理STG_E_INVALIDFUNCTION错误。LockRegion 方法在复合文件实现中不起作用,因为该实现不支持范围锁定。
实施者说明
对于流对象的实现,对此方法的支持是可选的,因为基础文件系统可能不支持此方法。 支持的锁定类型也是可选的。 如果不支持所请求的锁定类型,则返回STG_E_INVALIDFUNCTION错误。要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 专业版 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows 2000 Server [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | objidl.h |
Library | Uuid.lib |
DLL | Ole32.dll |