Функция StgOpenStorage (coml2api.h)
Функция StgOpenStorage открывает существующий корневой объект хранилища в файловой системе. Используйте эту функцию для открытия составных файлов. Не используйте его для открытия каталогов, файлов или сводных каталогов. Вложенные объекты хранилища можно открыть только с помощью родительского метода IStorage::OpenStorage .
Синтаксис
HRESULT StgOpenStorage(
[in] const WCHAR *pwcsName,
[in] IStorage *pstgPriority,
[in] DWORD grfMode,
[in] SNB snbExclude,
[in] DWORD reserved,
[out] IStorage **ppstgOpen
);
Параметры
[in] pwcsName
Указатель на путь к строкового файла Юникода, завершаемого значением NULL, который содержит открываемый объект хранилища. Этот параметр игнорируется, если параметр pstgPriority не имеет значения NULL.
[in] pstgPriority
Указатель на интерфейс IStorage , который должен иметь значение NULL. Если значение не равно NULL, этот параметр используется, как описано ниже в разделе Примечания.
После возврата StgOpenStorage объект хранилища, указанный в pStgPriority , может быть освобожден и больше не должен использоваться.
[in] grfMode
Указывает режим доступа, используемый для открытия объекта хранилища.
[in] snbExclude
Если значение не равно NULL, указатель на блок элементов в хранилище, который будет исключен при открытии объекта хранилища. Исключение происходит независимо от того, происходит ли копирование snapshot на открытом. Может иметь значение NULL.
[in] reserved
Указывает, зарезервировано для использования в будущем; значение должно быть равно нулю.
[out] ppstgOpen
Указатель на переменную указателя IStorage*, которая получает указатель интерфейса на открытое хранилище.
Возвращаемое значение
Функция StgOpenStorage также может возвращать любые ошибки файловой системы или системные ошибки, заключенные в HRESULT. Дополнительные сведения см. в разделах Стратегии обработки ошибок и Обработка неизвестных ошибок.
Комментарии
Функция StgOpenStorage открывает указанный корневой объект хранилища в соответствии с режимом доступа в параметре grfMode и в случае успешного выполнения предоставляет указатель IStorage на открытый объект хранения в параметре ppstgOpen .
Для поддержки простого режима для сохранения объекта хранилища без вложенных журналов функция StgOpenStorage принимает одно из следующих двух сочетаний флагов в качестве допустимых режимов в параметре grfMode .
STGM_SIMPLE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE
STGM_SIMPLE | STGM_READ | STGM_SHARE_EXCLUSIVE
Для поддержки режима с одним модулем записи, многочитанным режимом, первым сочетанием флагов является допустимый параметр grfMode для модуля записи. Вторая комбинация флагов допустима для читателей.
STGM_DIRECT_SWMR | STGM_READWRITE | STGM_SHARE_DENY_WRITE
STGM_DIRECT_SWMR | STGM_READ | STGM_SHARE_DENY_NONE
В прямом режиме допустимо одно из следующих трех сочетаний.
STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE
STGM_DIRECT | STGM_READ | STGM_SHARE_DENY_WRITE
STGM_DIRECT | STGM_READ | STGM_SHARE_EXCLUSIVE
STGM_READWRITE | STGM_SHARE_DENY_WRITE
// transacted versus direct mode omitted for exposition
Приложение может отменить изменения использовать разрешения и создать snapshot копию, если предыдущие разрешения на доступ не удается. Приложение должно запрашивать у пользователя перед созданием копии, отнимающей много времени.
STGM_READWRITE
// transacted versus direct mode omitted for exposition
Если семантика общего доступа к документам, подразумеваемая режимами доступа, подходит, приложение может попытаться открыть хранилище следующим образом. В этом случае при успешном выполнении приложения копия snapshot не будет выполнена (так как STGM_SHARE_DENY_WRITE была указана, что запрещает другим пользователям доступ на запись).
STGM_READ | STGM_SHARE_DENY_WRITE
// transacted versus direct mode omitted for exposition
Параметр pstgPriority предназначен для удобства для вызывающих объектов, заменяющих существующий объект хранилища, часто открытый в режиме приоритета, новым объектом хранения, открытым в том же файле, но в другом режиме. Если pstgPriority не имеет значение NULL, он используется для указания имени файла вместо pwcsName, которое игнорируется. Однако рекомендуется, чтобы приложения всегда передавали значение NULL для pstgPriority , так как StgOpenStorage освобождает объект при определенных обстоятельствах и не освобождает его при других обстоятельствах. В частности, если функция возвращает результат сбоя, вызывающий объект не может определить, был ли освобожден объект хранилища.
Функциональность параметра pstgPriority может дублироваться вызывающим абонентом более безопасным образом, как показано в следующем примере:
// Replacement for:
// HRESULT hr = StgOpenStorage(
// NULL, pstgPriority, grfMode, NULL, 0, &pstgNew);
STATSTG statstg;
HRESULT hr = pstgPriority->Stat(&statstg, 0);
pStgPriority->Release();
pStgPriority = NULL;
if (SUCCEEDED(hr))
{
hr = StgOpenStorage(statstg.pwcsName, NULL, grfMode, NULL, 0, &pstgNew);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | coml2api.h (включая Objbase.h) |
Библиотека | Ole32.lib |
DLL | Ole32.dll |