Функция StgOpenStorageOnILockBytes (coml2api.h)
Функция StgOpenStorageOnILockBytes открывает существующий объект хранилища, который не находится в файле диска, а имеет базовый массив байтов, предоставленный вызывающим объектом.
Синтаксис
HRESULT StgOpenStorageOnILockBytes(
[in] ILockBytes *plkbyt,
[in] IStorage *pstgPriority,
[in] DWORD grfMode,
[in] SNB snbExclude,
[in] DWORD reserved,
[out] IStorage **ppstgOpen
);
Параметры
[in] plkbyt
ILockBytes — указатель на базовый объект массива байтов, содержащий открываемый объект хранилища.
[in] pstgPriority
Указатель на интерфейс IStorage , который должен иметь значение NULL. Если значение не равно NULL, этот параметр используется, как описано ниже в разделе Примечания.
После возврата StgOpenStorageOnILockBytes объект хранилища, указанный в pStgPriority , может быть освобожден и больше не должен использоваться.
[in] grfMode
Указывает режим доступа, используемый для открытия объекта хранилища. Дополнительные сведения см. в разделе Константы STGM и примечания ниже.
[in] snbExclude
Может иметь значение NULL. Если значение не равно NULL, этот параметр указывает на блок элементов в этом хранилище, которые должны быть исключены при открытии объекта хранилища. Это исключение происходит независимо от того, выполняется ли snapshot копирование при открытии.
[in] reserved
Указывает, зарезервировано для использования в будущем; значение должно быть равно нулю.
[out] ppstgOpen
Указывает на расположение указателя IStorage на открытое хранилище при успешном возвращении.
Возвращаемое значение
Функция StgOpenStorageOnILockBytes также может возвращать любые ошибки файловой системы или системные ошибки, заключенные в HRESULT, или возвращаемые значения ошибок интерфейса ILockBytes . См . статьи Стратегии обработки ошибок и Обработка неизвестных ошибок.
Комментарии
StgOpenStorageOnILockBytes открывает указанный корневой объект хранилища. Указатель на интерфейс IStorage в открытом объекте хранилища предоставляется с помощью параметра ppstgOpen .
Объект хранилища должен быть ранее создан функцией StgCreateDocfileOnILockBytes .
За исключением указания предоставленного программистом объекта массива байтов, StgOpenStorageOnILockBytes аналогичен функции StgOpenStorage . Объект хранилища открывается в соответствии с режимами доступа в параметре grfMode с учетом следующих ограничений:
Поведение режима общего доступа и изоляция транзакций зависят от реализации ILockBytes , поддерживающей LockRegion и UnlockRegion с LOCK_ONLYONCE семантикой. Реализации могут указывать на то, что структурированное хранилище поддерживает эту функцию, задав бит LOCK_ONLYONCE в элементе grfLocksSupportedSTATSTG. Если реализация ILockBytes не поддерживает эту функцию, режимы совместного использования не будут применяться, а фиксации транзакций корневого уровня не будут должным образом координироваться с другими экземплярами транзакций, открытыми в том же массиве байтов. Приложения, использующие реализацию ILockBytes , которая не поддерживает блокировку регионов, такие как реализация CreateStreamOnHGlobal , не должны открывать несколько параллельных экземпляров в одном массиве байтов.
StgOpenStorageOnILockBytes не поддерживает простой режим. Флаг STGM_SIMPLE , если он присутствует, игнорируется.
Параметр pStgPriority предназначен для удобства для вызывающих объектов, заменяющих существующий объект хранилища, часто открытый в режиме приоритета, новым объектом хранилища, открытым в том же массиве байтов. В отличие от параметра pStgPrioritystgOpenStorage, этот параметр не влияет на операцию открытия, выполняемую StgOpenStorageOnILockBytes , и является просто существующим объектом хранилища, который вызывающий объект хотел бы освободить. Вызывающие объекты всегда должны передавать значение NULL для этого параметра, так как StgOpenStorageOnILockBytes при некоторых обстоятельствах освобождает объект и не освобождает его при других обстоятельствах. Использование параметра pStgPriority может быть дублировано вызывающим объектом более безопасным способом, вместо этого отпустив объект перед вызовом StgOpenStorageOnILockBytes, как показано в следующем примере:
// Replacement for:
// HRESULT hr = StgOpenStorageOnILockBytes(
// plkbyt, pStgPriority, grfMode, NULL, 0, &pstgNew);
pStgPriority->Release();
pStgPriority = NULL;
hr = StgOpenStorage(plkbyt, NULL, grfMode, NULL, 0, &pstgNew);
Дополнительные сведения см. в статье StgOpenStorage.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | coml2api.h (включая Objbase.h) |
Библиотека | Ole32.lib |
DLL | Ole32.dll |