ILockBytes::LockRegion 方法 (objidl.h)

LockRegion 方法限制对字节数组中指定字节范围的访问。

语法

HRESULT LockRegion(
  [in] ULARGE_INTEGER libOffset,
  [in] ULARGE_INTEGER cb,
  [in] DWORD          dwLockType
);

参数

[in] libOffset

指定范围开头的字节偏移量。

[in] cb

指定要限制的范围的长度(以字节为单位)。

[in] dwLockType

指定在访问范围时请求的限制类型。 此参数使用 LOCKTYPE 枚举中的值之一。

返回值

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

返回代码 说明
S_OK 指定的字节范围已锁定。
STG_E_INVALIDFUNCTION 完全不支持锁定,或者不支持请求的特定类型的锁。
STG_E_ACCESSDENIED 访问被拒绝,因为调用方的权限不足,或者另一个调用方打开并锁定了文件。
STG_E_LOCKVIOLATION 访问被拒绝,因为另一个调用方已打开并锁定文件。
STG_E_INVALIDHANDLE 基础文件已过早关闭,或者正确的软盘已被无效的软盘替换。

注解

ILockBytes::LockRegion 限制对指定字节范围的访问。 锁定某个区域后,其他人获取对受限范围的访问权限的尝试必须失败,并出现STG_E_ACCESSDENIED错误。

字节范围可以扩展到字节数组的当前末尾。 将数组末尾锁定作为字节数组对象的不同实例之间的通信方法很有用,无需更改实际属于字节数组的数据。 例如,复合文件的 ILockBytes 实现可能依赖于锁定超过数组当前端的访问控制,使用特定的锁定区域来指示当前授予的权限。

dwLockType 参数使用 LOCKTYPE 枚举中的值指定三种类型的锁定之一。 这些类型如下:锁定以排除其他编写器,锁定以排除其他读取器或编写器,以及仅允许一个请求者获取给定范围的锁的锁定。 第三种类型的锁定通常是其他两种锁类型之一的别名,并且允许实现者添加其他行为。 给定的字节数组可能支持前两种类型之一,或者同时支持这两种类型之一。

若要确定特定 ILockBytes 实现支持的锁类型,可以检查调用 ILockBytes::Stat 返回的 STATSTG 结构的 grfLocksSupported 成员。

以后,必须使用与 libOffset、cbdwLockType 参数完全相同的值调用 ILockBytes::UnlockRegion 来显式解锁使用 ILockBytes::LockRegion 锁定的任何区域。 必须先解锁该区域,然后才能释放流。 两个相邻区域不能单独锁定,然后通过一次解锁调用解锁。

调用方备注

由于支持的锁定类型是可选的,并且可能因 ILockBytes 的不同实现而异,因此必须提供代码来处理STG_E_INVALIDFUNCTION错误。

实施者说明

对此方法的支持取决于如何使用 基于 ILockBytes 实现生成的存储对象。 如果知道在任何给定时间,在字节数组的存储设备上只能打开一个存储对象,则 ILockBytes 实现不需要支持锁定。 但是,如果可以同时打开存储对象,则需要区域锁定来协调它们。

LockRegion 实现可以选择支持所有、部分或不支持锁类型。 对于不受支持的锁类型,实现应返回STG_E_INVALIDFUNCTION。

要求

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

另请参阅

ILockBytes - File-Based 实现

ILockBytes - 全局内存实现

ILockBytes::Stat

ILockBytes::UnlockRegion

IStream::LockRegion

LOCKTYPE