IByteBuffer::LockRegion 方法

[ LockRegion 方法可用于“要求”部分中指定的操作系统。 它不适用于 Windows Server 2003 Service Pack 1 (SP1) 及更高版本、Windows Vista、Windows Server 2008 和操作系统的后续版本。 IStream 接口提供类似的功能。]

LockRegion 方法限制对缓冲区对象中指定字节范围的访问。

语法

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

parameters

libOffset [in]

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

cb [in]

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

dwLockType [in]

指定在访问范围时请求的限制。 这可以是下表中的值之一。

含义
LOCK_WRITE
指定字节范围可以打开和读取任意次数,但禁止写入锁定范围,但授予此锁的所有者除外。
LOCK_EXCLUSIVE
禁止写入指定的字节范围,但被授予此锁的所有者除外。
LOCK_ONLYONCE
如果授予此锁,则无法获取该范围的其他LOCK_ONLYONCE锁。 通常,此锁类型是其他某些锁类型的别名。 因此,特定实现可以具有与此锁类型关联的其他行为。

返回值

返回值为 HRESULT。 值为 S_OK 表示调用成功。

备注

字节范围可以超出流的当前末尾。 在流末尾之外锁定作为流不同实例之间的通信方法很有用,无需更改实际属于流一部分的数据。

可以支持三种类型的锁定:锁定以排除其他编写器,锁定以排除其他读取器或编写器,以及仅允许一个请求者获取给定范围的锁,这通常是其他两种锁类型之一的别名。 给定的流实例可能支持前两种类型之一,或同时支持这两种类型之一。 锁类型由 dwLockType 指定,使用 LOCKTYPE 枚举中的值。

使用 LockRegion 锁定的任何区域以后都必须通过调用 IByteBuffer::UnlockRegion 来显式解锁,其值与 libOffsetcbdwLockType 参数的值完全相同。 必须先解锁该区域,然后才能释放流。 无法单独锁定两个相邻区域,然后通过单个解锁调用解锁。

示例

以下示例演示如何限制对字节范围的访问。

HRESULT  hr;

// Lock a region.
hr = pIByteBuff->LockRegion(0, 10, LOCK_EXCLUSIVE);
if (FAILED(hr))
  printf("Failed IByteBuffer::LockRegion\n");

要求

要求
最低受支持的客户端
Windows XP [仅限桌面应用]
最低受支持的服务器
Windows Server 2003 [仅限桌面应用]
客户端支持终止
Windows XP
终止服务器支持
Windows Server 2003
标头
Scardssp.h
类型库
Scardssp.tlb
DLL
Scardssp.dll
IID
IID_IByteBuffer定义为 E126F8FE-A7AF-11D0-B88A-00C04FD424B9