Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
A version of this page is also available for
4/8/2010

This method restricts access to a specified range of bytes in the stream. Supporting this functionality is optional because some file systems do not provide it.

Syntax

HRESULT LockRegion( 
  LARGE_INTEGER 
libOffset, 
  LARGE_INTEGER 
cb, 
  DWORD 
dwLockType 
);

Parameters

libOffset

[in] Integer that specifies the byte offset for the beginning of the range.

cb

[in] Integer that specifies the length of the range, in bytes, to be restricted.

dwLockType

[in] Specifies the restrictions being requested on accessing the range.

Return Value

The following table shows the return values for this method.

Value Description

S_OK

The specified range of bytes was locked.

E_PENDING

Asynchronous Storage only: Part or all of the stream's data is currently unavailable.

STG_E_INVALIDFUNCTION

Locking is not supported at all or the specific type of lock requested is not supported.

STG_E_LOCKVIOLATION

Requested lock is supported, but cannot be granted because of an existing lock.

STG_E_REVERTED

The object has been invalidated by a revert operation above it in the transaction tree.

Remarks

The byte range can extend past the current end of the stream.

Locking beyond the end of a stream is useful as a method of communication between different instances of the stream without changing data that is actually part of the stream.

Three types of locking can be supported: locking to exclude other writers, locking to exclude other readers or writers, and locking that allows only one requestor to obtain a lock on the given range, which is usually an alias for one of the other two lock types.

A given stream instance might support either of the first two types, or both.

The lock type is specified by dwLockType, using a value from the LOCKTYPEenumeration.

Any region locked with IStream::LockRegionmust later be explicitly unlocked by calling the IStream::UnlockRegionmethod with exactly the same values for the libOffset, cb, and dwLockType parameters.

The region must be unlocked before the stream is released.

Two adjacent regions cannot be locked separately and then unlocked with a single unlock call.

To determine whether the platform supports this interface, see Determining Supported COM APIs.

Notes to Callers

Because the type of locking supported is optional and can vary in different implementations of IStream, you must provide code to deal with the STG_E_INVALIDFUNCTION error.

This method has no effect in the compound file implementation, because the implementation does not support range locking.

Notes to Implementers

Support for this method is optional for implementations of stream objects because it may not be supported by the underlying file system.

The type of locking supported is also optional.

The STG_E_INVALIDFUNCTION error is returned if the requested type of locking is not supported.

Requirements

Header objidl.h, objidl.idl
Library ole32.lib, uuid.lib
Windows Embedded CE Windows CE 2.0 and later
Windows Mobile Windows Mobile Version 5.0 and later