ILockBytes::LockRegion
Restricts access to a specified range of bytes in the byte array.
HRESULT LockRegion(
ULARGE_INTEGER libOffset,
| //Specifies the byte offset for the beginning of the range
|
ULARGE_INTEGER cb,
| //Specifies the length of the range in bytes
|
DWORD dwLockType
| //Specifies the type of restriction on accessing the specified range
|
);
|
|
Parameters
libOffset
[in]Specifies the byte offset for the beginning of the range.
cb
[in]Specifies, in bytes, the length of the range to be restricted.
dwLockType
[in]Specifies the type of restrictions being requested on accessing the range.
This parameter uses one of the values from the
LOCKTYPE enumeration.
Return Values
S_OK
The specified range of bytes was locked.
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.
Comments
This method restricts access to the specified range of bytes. Once a region is
locked, attempts by others to perform the restricted access must fail with the
STG_E_ACCESSDENIED error.
The byte range can extend past the current end of the current byte array.
Locking beyond the end of an array is useful as a method of communication between
different instances of the byte array object without changing data that is
actually part of the byte array. For example, an implementation of compound files
could rely on locking past the current end of the array as a means of access
control, using specific locked regions to indicate permissions currently granted.
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 byte array might support either of the first
two types, or both. The lock type is specified by
dwLockType, using a value from the
LOCKTYPE enumeration.
To determine the lock types supported by a particular
ILockBytes implementation, you can examine the
grfLocksSupported member of the
STATSTG structure returned by a call to
ILockBytes::Stat.
Any region locked with
ILockBytes::LockRegion must later be explicitly unlocked by calling
ILockBytes::UnlockRegion 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.
Notes to Callers
Since the type of locking supported is optional and can vary in different
implementations of
ILockBytes, you must provide code to deal with the STG_E_INVALIDFUNCTION error.
Notes to Implementors
Support for this method depends on how the storage objects built on top of the
ILockBytes implementation is used. If you know that, at any given time, only one storage
object can be opened on the storage device that underlies the byte array, then
your
ILockBytes implementation does not need to support locking. However, if multiple
simultaneous openings of a storage object are possible, then region locking is needed
to coordinate them.
A
LockRegion implementation can choose to support all, some, or none of the lock types.
For unsupported lock types, the implementation should return
STG_E_INVALIDFUNCTION.
See Also
ILockBytes::Stat,
ILockBytes::UnlockRegion,
IStream::LockRegion,
LOCKTYPE
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database