Compartilhar via


Função StgCreateStorageEx (coml2api.h)

A função StgCreateStorageEx cria um novo objeto de armazenamento usando uma implementação fornecida para as interfaces IStorage ou IPropertySetStorage. Para abrir um arquivo existente, use a função StgOpenStorageEx.

Os aplicativos escritos para Windows 2000, Windows Server 2003 e Windows XP devem usar StgCreateStorageEx em vez de StgCreateDocfile para aproveitar os recursos aprimorados do Armazenamento Estruturado do Windows 2000 e do Windows XP.

Sintaxe

HRESULT StgCreateStorageEx(
  [in]  const WCHAR          *pwcsName,
  [in]  DWORD                grfMode,
  [in]  DWORD                stgfmt,
  [in]  DWORD                grfAttrs,
  [in]  STGOPTIONS           *pStgOptions,
  [in]  PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in]  REFIID               riid,
  [out] void                 **ppObjectOpen
);

Parâmetros

[in] pwcsName

Um ponteiro para o caminho do arquivo a ser criado. Ele é passado sem interpretação para o sistema de arquivos. Pode ser um nome relativo ou NULL. Se NULL, um arquivo temporário será alocado com um nome exclusivo. Se nãoNULL, o tamanho da cadeia de caracteres não deverá exceder MAX_PATH caracteres.

Windows 2000: Diferentemente da função CreateFile , você não pode exceder o limite de MAX_PATH usando o prefixo "\?".

[in] grfMode

Um valor que especifica o modo de acesso a ser usado ao abrir o novo objeto de armazenamento. Para obter mais informações, consulte constantes STGM. Se o chamador especificar o modo transacionado junto com STGM_CREATE ou STGM_CONVERT, a substituição ou conversão ocorrerá quando a operação de confirmação for chamada para o armazenamento raiz. Se IStorage::Commit não for chamado para o objeto de armazenamento raiz, o conteúdo anterior do arquivo será restaurado. STGM_CREATE e STGM_CONVERT não podem ser combinados com o sinalizador STGM_NOSNAPSHOT, pois uma cópia de instantâneo é necessária quando um arquivo é substituído ou convertido no modo transacionado.

[in] stgfmt

Um valor que especifica o formato do arquivo de armazenamento. Para obter mais informações, consulte a enumeração STGFMT.

[in] grfAttrs

Um valor que depende do valor do parâmetro stgfmt.

Valores de parâmetro Significado
STGFMT_DOCFILE
0 ou FILE_FLAG_NO_BUFFERING. Para obter mais informações, consulte CreateFile. Se o tamanho do setor do arquivo, especificado em pStgOptions, não for um número inteiro múltiplo do tamanho do setor físico do disco subjacente, essa operação falhará.
Todos os outros valores de stgfmt
Deve ser 0.

[in] pStgOptions

O parâmetro pStgOptions será válido somente se o parâmetro stgfmt for definido como STGFMT_DOCFILE. Se o parâmetro stgfmt for definido como STGFMT_DOCFILE, pStgOptions apontará para a estrutura de STGOPTIONS, que especifica os recursos do objeto de armazenamento, como o tamanho do setor. Esse parâmetro pode ser NULL, que cria um objeto de armazenamento com um tamanho de setor padrão de 512 bytes. Se nãoNULL, o membro ulSectorSize deverá ser definido como 512 ou 4096. Se definido como 4096, STGM_SIMPLE poderá não ser especificado no parâmetro grfMode. O membro usVersion deve ser definido antes de chamar StgCreateStorageEx. Para obter mais informações, consulte STGOPTIONS .

[in] pSecurityDescriptor

Permite que as ACLs sejam definidas quando o arquivo é criado. Se não NULL, precisará ser um ponteiro para a estrutura de SECURITY_ATTRIBUTES. Consulte CreateFile para obter informações sobre como definir ACLs em arquivos.

Windows Server 2003, Windows 2000 Server, Windows XP e Windows 2000 Professional: Value deve ser NULL.

[in] riid

Um valor que especifica o IID (identificador de interface) do ponteiro de interface a ser retornado. Essa IID pode ser para a interface IStorage ou a interface IPropertySetStorage .

[out] ppObjectOpen

Um ponteiro para uma variável de ponteiro de interface que recebe um ponteiro para uma interface no novo objeto de armazenamento; contém NULL se a operação falhou.

Valor de retorno

Essa função 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.

Observações

Quando um aplicativo modifica seu arquivo, ele geralmente cria uma cópia do original. A função StgCreateStorageEx é uma maneira de criar uma cópia. Essa função funciona indiretamente com a API de duplicação do EFS (Encrypting File System). Ao usar essa função, você precisará definir as opções para o armazenamento de arquivos na estrutura STGOPTIONS.

StgCreateStorageEx é um superconjunto da função StgCreateDocfile e deve ser usado pelo novo código. Melhorias futuras no Armazenamento Estruturado serão expostas por meio da função StgCreateStorageEx. Consulte a seção Requisitos a seguir para obter informações sobre plataformas com suporte.

A função StgCreateStorageEx cria um novo objeto de armazenamento usando uma das implementações de armazenamento estruturado fornecidas pelo sistema. Essa função pode ser usada para obter uma
de implementação de arquivo composto IStorage, uma implementação de arquivo composto IPropertySetStorage ou para obter uma implementação IPropertySetStorage NTFS.

Quando um novo arquivo é criado, a implementação de armazenamento usada depende do sinalizador especificado e do tipo de unidade no qual o arquivo é armazenado. Para obter mais informações, consulte a enumeração STGFMT.

stgCreateStorageEx criará o arquivo se ele não existir. Se existir, o uso dos sinalizadores STGM_CREATE, STGM_CONVERT e STGM_FAILIFTHERE no parâmetro grfMode indicará como proceder. Para obter mais informações sobre esses valores, consulte constantes STGM. Não é válido, no modo direto, especificar o modo STGM_READ no parâmetro grfMode (o modo direto é indicado por não especificar o sinalizador STGM_TRANSACTED). Essa função não pode ser usada para abrir um arquivo existente; em vez disso, use a função StgOpenStorageEx.

Você pode usar a função StgCreateStorageEx para obter acesso ao armazenamento raiz de um documento de armazenamento estruturado ou ao armazenamento do conjunto de propriedades de qualquer arquivo que dê suporte a conjuntos de propriedades. Consulte a documentação STGFMT para obter informações sobre quais IIDs têm suporte para diferentes valores de STGFMT.

Quando um arquivo é criado com essa função para acessar a implementação do conjunto de propriedades NTFS, as regras especiais de compartilhamento se aplicam. Para obter mais informações, consulte IPropertySetStorage-NTFSde Implementação.

Se um arquivo composto for criado no modo transacionado (especificando STGM_TRANSACTED) e no modo somente leitura (especificando STGM_READ), será possível fazer alterações no objeto de armazenamento retornado. Por exemplo, é possível chamar IStorage::CreateStream. No entanto, não é possível confirmar essas alterações chamando IStorage::Commit. Portanto, essas alterações serão perdidas.

Especificar STGM_SIMPLE fornece uma implementação muito mais rápida de um objeto de arquivo composto em um caso limitado, mas frequentemente usado envolvendo aplicativos que exigem uma implementação de arquivo composto com vários fluxos e nenhum armazenamento. Para obter mais informações, consulte constantes STGM. Não é válido especificar que STGM_TRANSACTED se STGM_SIMPLE for especificado.

O modo simples não dá suporte a todos os métodos em IStorage. Especificamente, no modo simples, os métodos IStorage com suporte são CreateStream, Commite SetClass, bem como os métodos IUnknown COM de QueryInterface, AddRef e Release. Além disso, há suporte para SetElementTimes com um nome de NULL , permitindo que os aplicativos definam horários em um armazenamento raiz. Todos os outros métodos de IStorage retornam STG_E_INVALIDFUNCTION.

Se o parâmetro grfMode especificar STGM_TRANSACTED e nenhum arquivo ainda existir com o nome especificado pelo parâmetro pwcsName, o arquivo será criado imediatamente. Em um sistema de arquivos controlado pelo acesso, o chamador deve ter permissões de gravação para o diretório do sistema de arquivos no qual o arquivo composto é criado. Se STGM_TRANSACTED não for especificado e STGM_CREATE for especificado, um arquivo existente com o mesmo nome será destruído antes de criar o novo arquivo.

Você também pode usar StgCreateStorageEx para criar um arquivo composto temporário passando um valor de NULL para o parâmetro pwcsName. No entanto, esses arquivos são temporários apenas no sentido de que eles têm um nome exclusivo fornecido pelo sistema – um que provavelmente não tem sentido para o usuário. O chamador é responsável por excluir o arquivo temporário quando concluído com ele, a menos que STGM_DELETEONRELEASE tenha sido especificado para o parâmetro grfMode. Para obter mais informações sobre esses sinalizadores, consulte constantes STGM.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho coml2api.h (inclua Objbase.h)
biblioteca Ole32.lib
de DLL Ole32.dll

Consulte também

CreateFile

STGFMT

constantes STGM

STGOPTIONS

StgCreateDocFileOnILockBytes

StgCreateDocfile

StgOpenStorageEx