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 来显式解锁,其值与 libOffset、 cb 和 dwLockType 参数的值完全相同。 必须先解锁该区域,然后才能释放流。 无法单独锁定两个相邻区域,然后通过单个解锁调用解锁。
示例
以下示例演示如何限制对字节范围的访问。
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 |
标头 |
|
类型库 |
|
DLL |
|
IID |
IID_IByteBuffer定义为 E126F8FE-A7AF-11D0-B88A-00C04FD424B9 |