Поделиться через


Метод IStream::LockRegion (objidl.h)

Метод LockRegion ограничивает доступ к указанному диапазону байтов в потоке. Поддержка этой функции необязательна, так как некоторые файловые системы не предоставляют ее.

Синтаксис

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

Параметры

[in] libOffset

Целое число, указывающее смещение в байтах для начала диапазона.

[in] cb

Целое число, указывающее длину ограниченного диапазона в байтах.

[in] dwLockType

Указывает ограничения, запрашиваемые при доступе к диапазону.

Возвращаемое значение

Этот метод может возвращать одно из этих значений.

Код возврата Описание
S_OK Указанный диапазон байтов был заблокирован.
E_PENDING Только асинхронное хранилище. Часть или все данные потока в настоящее время недоступны.
STG_E_INVALIDFUNCTION Блокировка не поддерживается вообще или конкретный тип запрошенной блокировки не поддерживается.
STG_E_LOCKVIOLATION Запрошенная блокировка поддерживается, но не может быть предоставлена из-за существующей блокировки.
STG_E_REVERTED Объект был признан недействительным операцией отменить изменения над ним в дереве транзакций.

Комментарии

Диапазон байтов потока можно расширить. Блокировка расширенного диапазона для потока полезна как метод обмена данными между различными экземплярами потока без изменения данных, которые фактически являются частью потока.

Поддерживаются три типа блокировки: блокировка для исключения других модулей записи, блокировка для исключения других модулей чтения или записи и блокировка, которая позволяет только одному инициатору запроса получить блокировку в заданном диапазоне, который обычно является псевдонимом для одного из двух других типов блокировки. Данный экземпляр потока может поддерживать один из первых двух типов или оба типа. Тип блокировки задается с помощью dwLockType, используя значение из перечисления LOCKTYPE .

Любой регион, заблокированный iStream::LockRegion , должен быть позже явно разблокирован путем вызова метода IStream::UnlockRegion с теми же значениями для параметров libOffset, cb и dwLockType . Регион должен быть разблокирован перед освобождением потока. Две смежные области нельзя заблокировать отдельно, а затем разблокировать с помощью одного вызова разблокировки.

Примечания к вызывающим абонентам

Так как поддерживаемый тип блокировки является необязательным и может отличаться в разных реализациях IStream, необходимо предоставить код для устранения ошибки STG_E_INVALIDFUNCTION.

Метод LockRegion не оказывает влияния на реализацию составного файла, так как реализация не поддерживает блокировку диапазона.

Примечания для разработчиков

Поддержка этого метода является необязательной для реализаций объектов потока, так как он может не поддерживаться базовой файловой системой. Поддерживаемый тип блокировки также является необязательным. Ошибка STG_E_INVALIDFUNCTION возвращается, если запрошенный тип блокировки не поддерживается.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header objidl.h
Библиотека Uuid.lib
DLL Ole32.dll

См. также раздел

IStream — реализация составного файла

IStream::UnlockRegion

LOCKTYPE