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


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

Метод LockRegion ограничивает доступ к указанному диапазону байтов в массиве байтов.

Синтаксис

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

Параметры

[in] libOffset

Задает смещение в байтах для начала диапазона.

[in] cb

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

[in] dwLockType

Указывает тип запрашиваемых ограничений на доступ к диапазону. Этот параметр использует одно из значений перечисления LOCKTYPE .

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

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

Код возврата Описание
S_OK Указанный диапазон байтов был заблокирован.
STG_E_INVALIDFUNCTION Блокировка не поддерживается вообще или конкретный тип запрошенной блокировки не поддерживается.
STG_E_ACCESSDENIED Доступ запрещен, так как у вызывающего абонента недостаточно разрешений или другой вызывающей стороны файл открыт и заблокирован.
STG_E_LOCKVIOLATION Доступ запрещен, так как другой вызывающий объект открыт и заблокирован.
STG_E_INVALIDHANDLE Базовый файл был преждевременно закрыт или правильный гибкий диск был заменен недопустимым.

Комментарии

ILockBytes::LockRegion ограничивает доступ к указанному диапазону байтов. После блокировки региона попытки других пользователей получить доступ к ограниченному диапазону должны завершиться ошибкой STG_E_ACCESSDENIED.

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

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

Чтобы определить типы блокировок, поддерживаемые конкретной реализацией ILockBytes , можно изучить элемент grfLocksSupported структуры STATSTG , возвращаемый вызовом метода ILockBytes::Stat.

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

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

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

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

Поддержка этого метода зависит от того, как используется объект хранилища, созданный на основе реализации ILockBytes . Если известно, что на устройстве хранения, лежащем в основе массива байтов, в любой момент времени может быть открыт только один объект хранилища, то реализация ILockBytes не должна поддерживать блокировку. Однако если возможно несколько одновременных открытий объекта хранилища, для их координации требуется блокировка региона.

Реализация LockRegion может поддерживать все, некоторые или ни один из типов блокировки. Для неподдерживаемых типов блокировок реализация должна возвращать STG_E_INVALIDFUNCTION.

Требования

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

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

ILockBytes — реализация File-Based

ILockBytes — реализация глобальной памяти

ILockBytes::Stat

ILockBytes::UnlockRegion

IStream::LockRegion

LOCKTYPE