Método IPropertyStorage::Commit (propidlbase.h)

O método IPropertyStorage::Commit salva as alterações feitas em um objeto de armazenamento de propriedades no objeto de armazenamento pai.

Sintaxe

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Parâmetros

[in] grfCommitFlags

Os sinalizadores que especificam as condições sob as quais a confirmação deve ser executada. Para obter mais informações sobre sinalizadores específicos e seus significados, consulte a seção Comentários.

Retornar valor

Esse método dá suporte ao valor retornado padrão E_UNEXPECTED, bem como ao seguinte:

Comentários

Assim como IStorage::Commit, o método IPropertyStorage::Commit garante que todas as alterações feitas em um objeto de armazenamento de propriedades sejam refletidas no armazenamento pai.

No modo direto na implementação de arquivo composto, uma chamada para esse método faz com que as alterações atualmente nos buffers de memória sejam liberadas para o fluxo de propriedades subjacente. Na implementação de arquivo composto para conjuntos de propriedades não simples, IStorage::Commit também é chamado no objeto substorage subjacente com o parâmetro grfCommitFlags passado.

No modo transacionado, esse método faz com que as alterações sejam refletidas permanentemente na imagem persistente do objeto de armazenamento. As alterações confirmadas devem ter sido feitas nesse conjunto de propriedades desde que ele foi aberto ou desde o último commit nesta abertura do conjunto de propriedades. O método commit publica as alterações feitas em um nível de objeto para o próximo nível. É claro que isso permanece sujeito a qualquer transação de nível externo que possa estar presente no objeto no qual esse conjunto de propriedades está contido. A permissão de gravação deve ser especificada quando o conjunto de propriedades é aberto (por meio de IPropertySetStorage) na abertura do conjunto de propriedades para que a operação de confirmação seja bem-sucedida.

Se a operação de confirmação falhar por qualquer motivo, o estado do objeto de armazenamento de propriedades permanecerá como era antes da confirmação.

Essa chamada não tem efeito sobre as propriedades existentes com valor de armazenamento ou fluxo abertas a partir desse armazenamento de propriedades, mas as confirma.

Os valores válidos para o parâmetro grfCommitFlags são listados na tabela a seguir.

Valor Significado
STGC_DEFAULT Confirma de acordo com a semântica de transação usual. O último escritor ganha. Esse sinalizador pode não ser especificado com outros valores de sinalizador.
STGC_ONLYIFCURRENT Confirma as alterações somente se o conteúdo persistente atual do conjunto de propriedades for aquele em que as alterações prestes a serem confirmadas se baseiam. Ou seja, não confirmará as alterações se o conteúdo do conjunto de propriedades tiver sido alterado por um commit de outra abertura do conjunto de propriedades. O erro STG_E_NOTCURRENT será retornado se a confirmação não for bem-sucedida por esse motivo.
STGC_OVERWRITE Útil somente ao confirmar uma transação que não tem mais nível de aninhamento externo de transações, embora aceitável em todos os casos.
Nota Indica que o chamador está disposto a arriscar alguns dados corrompidos em detrimento da diminuição do uso do disco no volume de destino. Esse sinalizador é potencialmente útil em cenários de pouco espaço em disco, embora deva ser usado com cuidado.
 
 
Nota O uso de IPropertyStorage::Commit para gravar propriedades em arquivos de imagem no Windows XP não funciona. Os formatos de arquivo de imagem afetados incluem:
  • .bmp
  • .dib
  • .emf
  • .gif
  • .ico
  • .jfif
  • .jpe
  • .jpeg
  • .jpg
  • .png
  • .Rle
  • .tiff
  • .wmf
Devido a um bug no manipulador de propriedades de arquivo de imagem no Windows XP, chamar IPropertyStorage::Commit realmente descarta todas as alterações feitas em vez de persistê-las.

Uma solução alternativa é

omita a chamada para IPropertyStorage::Commit. Chamar IUnknown::Release no manipulador de propriedades de arquivo de imagem XP sem chamar IPropertyStorage::Commit primeiro confirma implicitamente as alterações no arquivo. Observe que, em geral, chamar IUnknown::Release sem primeiro chamar IPropertyStorage::Commit descartará todas as alterações feitas; essa solução alternativa é específica para o manipulador de propriedades de arquivo de imagem no Windows XP. Observe também que, em versões posteriores do Windows, esse componente funciona corretamente (ou seja, chamar IPropertyStorage::Commit persiste as alterações e chamar IUnknown::Release sem chamar IPropertyStorage::Commit as descarta).

 

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 propidlbase.h (inclua Objbase.h, Propidlbase.h)
Biblioteca Uuid.lib
DLL Ole32.dll

Confira também

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit