|
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
Related LinksSoftware for Delphi and C++ Builder developers Software for Visual Studio .NET developers Software for Visual Basic 6 developers Delphi Tips&Tricks
MegaDetailed.NET
TMS Scripter Studio Pro components for Delphi/C++Builder
More Online Helps Win32 Programmer's Reference (win32.hlp) Win32 Multimedia Programmer's Reference (mmedia.hlp) Microsoft Windows Pen API Programmer's Reference (penapi.hlp) Microsoft Windows Sockets 2 Reference (sock2.hlp) Microsoft Windows Telephony API (TAPI) Programmer's Reference (sock2.hlp) Unix Manual Pages
|