Função StgOpenStorage (coml2api.h)
A função StgOpenStorage abre um objeto de armazenamento raiz existente no sistema de arquivos. Use essa função para abrir arquivos compostos. Não o use para abrir diretórios, arquivos ou catálogos de resumo. Os objetos de armazenamento aninhados só podem ser abertos usando o método IStorage::OpenStorage pai.
Sintaxe
HRESULT StgOpenStorage(
[in] const WCHAR *pwcsName,
[in] IStorage *pstgPriority,
[in] DWORD grfMode,
[in] SNB snbExclude,
[in] DWORD reserved,
[out] IStorage **ppstgOpen
);
Parâmetros
[in] pwcsName
Um ponteiro para o caminho do arquivo de cadeia de caracteres Unicode terminado em nulo que contém o objeto de armazenamento a ser aberto. Esse parâmetro será ignorado se o parâmetro pstgPriority não for NULL.
[in] pstgPriority
Um ponteiro para a interface IStorage que deve ser NULL. Se não for NULL, esse parâmetro será usado conforme descrito abaixo na seção Comentários.
Depois que StgOpenStorage retornar, o objeto de armazenamento especificado em pStgPriority pode ter sido liberado e não deve mais ser usado.
[in] grfMode
Especifica o modo de acesso a ser usado para abrir o objeto de armazenamento.
[in] snbExclude
Se não for NULL, ponteiro para um bloco de elementos no armazenamento a ser excluído à medida que o objeto de armazenamento é aberto. A exclusão ocorre independentemente de uma cópia instantâneo ocorrer ao abrir. Pode ser NULL.
[in] reserved
Indica reservado para uso futuro; deve ser zero.
[out] ppstgOpen
Um ponteiro para uma variável de ponteiro IStorage* que recebe o ponteiro de interface para o armazenamento aberto.
Retornar valor
A função StgOpenStorage também pode retornar erros do sistema de arquivos ou erros do sistema encapsulados em um HRESULT. Para obter mais informações, consulte Estratégias de tratamento de erros e tratamento de erros desconhecidos.
Comentários
A função StgOpenStorage abre o objeto de armazenamento raiz especificado de acordo com o modo de acesso no parâmetro grfMode e, se bem-sucedida, fornece um ponteiro IStorage para o objeto de armazenamento aberto no parâmetro ppstgOpen .
Para dar suporte ao modo simples para salvar um objeto de armazenamento sem subtorages, a função StgOpenStorage aceita uma das duas combinações de sinalizadores a seguir como modos válidos no parâmetro grfMode .
STGM_SIMPLE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE
STGM_SIMPLE | STGM_READ | STGM_SHARE_EXCLUSIVE
Para dar suporte ao gravador único, multireader, modo direto, a primeira combinação de sinalizador é o parâmetro grfMode válido para o gravador. A segunda combinação de sinalizadores é válida para leitores.
STGM_DIRECT_SWMR | STGM_READWRITE | STGM_SHARE_DENY_WRITE
STGM_DIRECT_SWMR | STGM_READ | STGM_SHARE_DENY_NONE
No modo direto, uma das três combinações a seguir é válida.
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
O aplicativo pode reverter usar as permissões e fazer uma cópia instantâneo, se as permissões de acesso anteriores falharem. O aplicativo deve solicitar ao usuário antes de fazer uma cópia demorada.
STGM_READWRITE
// transacted versus direct mode omitted for exposition
Se a semântica de compartilhamento de documentos implícita pelos modos de acesso for apropriada, o aplicativo poderá tentar abrir o armazenamento da seguinte maneira. Nesse caso, se o aplicativo for bem-sucedido, uma cópia instantâneo não terá sido feita (porque STGM_SHARE_DENY_WRITE foi especificado, negando a outras pessoas acesso de gravação).
STGM_READ | STGM_SHARE_DENY_WRITE
// transacted versus direct mode omitted for exposition
O parâmetro pstgPriority destina-se como uma conveniência para chamadores que substituem um objeto de armazenamento existente, geralmente um aberto no modo de prioridade, por um novo objeto de armazenamento aberto no mesmo arquivo, mas em um modo diferente. Quando pstgPriority não é NULL, ele é usado para especificar o nome do arquivo em vez de pwcsName, que é ignorado. No entanto, é recomendável que os aplicativos sempre passem NULL para pstgPriority porque StgOpenStorage libera o objeto em algumas circunstâncias e não o libera em outras circunstâncias. Em particular, se a função retornar um resultado de falha, não será possível que o chamador determine se o objeto de armazenamento foi liberado ou não.
A funcionalidade do parâmetro pstgPriority pode ser duplicada pelo chamador de maneira mais segura, conforme mostrado no exemplo a seguir:
// 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);
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | coml2api.h (inclua Objbase.h) |
Biblioteca | Ole32.lib |
DLL | Ole32.dll |