IStorage::Commit
9/8/2008
Esse método garante que qualquer as alterações feitas para um armazenamento objeto aberto no modo de transação são refletidas no armazenamento de pai.
Para um armazenamento raiz, este método reflete as alterações na real dispositivo, de exemplo, um arquivo no disco.
Para um objeto armazenamento raiz aberto em direcionar modo, este método não tem nenhum efeito, exceto para liberado memória todos os buffers para o disco.
Para objetos armazenamento nonroot direcionar modo, este método não tem nenhum efeito.
Syntax
HRESULT Commit(
DWORD grfCommitFlags
);
Parameters
- grfCommitFlags
[no] Valor que controla como as alterações são o compromisso de objeto de armazenamento. Para obter uma definição desses valores, consulte o STGC enumeração.
Return Value
A seguinte tabela mostra os valores de retorno para este método.
Valor | Descrição |
---|---|
S_OK |
Alterações para o objeto armazenamento foram confirmadas com êxito para o pai nível. Se STGC_CONSOLIDATE foi especificado, o armazenamento foi consolidado com êxito, ou o armazenamento já foi muito compacto para consolidar posteriormente. |
STG_S_MULTIPLEOPENS |
A operação confirmação bem-sucedida, mas o armazenamento não pôde ser consolidado porque ele tinha sido aberto múltiplo horas usando o sinalizador STGM_NOSNAPSHOT. |
STG_S_CANNOTCONSOLIDATE |
A operação confirmação bem-sucedida, mas o armazenamento não pôde ser consolidado devido a um modo armazenamento incorreto. Para arquivos compostos, o armazenamento pode ter sido aberto usando o sinalizador STGM_NOSCRATCH ou o armazenamento pode não ser o nível mais externo transacionado. |
STG_S_CONSOLIDATIONFAILED |
A operação confirmação bem-sucedida, mas o armazenamento não pôde ser consolidado devido a um erro interno. De exemplo, armazenamento não pôde ser consolidado se houver uma falha alocação memória. |
E_PENDING |
Somente armazenamento assíncrono: Parte ou todos os dados serem confirmadas no momento é não disponível. Para obter mais informações, consulte o IFillLockBytes interface e o armazenamento assíncrono. |
STG_E_INVALIDFLAG |
O valor para o grfCommitFlags parâmetro não é válido. |
STG_E_INVALIDPARAMETER |
Um dos parâmetros não era válido. |
STG_E_NOTCURRENT |
Aberto outro instância do objeto de armazenamento foi confirmada alterações. Como resultado, a atual confirmação operação pode substituir alterações anteriores. |
STG_E_MEDIUMFULL |
Nenhum espaço deixadas no dispositivo para confirmação. |
STG_E_TOOMANYOPENFILES |
A operação confirmação não pôde ser concluída porque há muitos aberto arquivos. |
STG_E_REVERTED |
O objeto armazenamento tiver sido invalidado por uma operação de reversão acima na árvore de transação. |
Remarks
IStorage::Commit Faz alterações permanentes para um objeto armazenamento que está em modo de transação, na qual as alterações são acumuladas em uma reserva e não refletidas no objeto de armazenamento até que haja um chamar para esse método.
O alternativo é aberto um objeto em direcionar modo, em quais alterações são refletidas imediatamente no objeto de armazenamento e, portanto, não requer uma operação confirmação.
Chamar esse método em um armazenamento aberto em direcionar modo não tem nenhum efeito, a menos que ele seja um armazenamento raiz, no qual maiúsculas e minúsculas ele garante que as alterações na memória buffers são gravadas de subjacente dispositivo armazenamento.
A operação confirmação Publica a atual alterações nesse objeto armazenamento e seus filhos para o próximo nível até na hierarquia de armazenamento.
Para desfazer atual alterações antes de confirmá-las, chamar o IStorage::Revert método para rolar para voltar para a versão Last-Committed.
Chamando IStorage::Commit não tem nenhum efeito nos elementos aninhados currently-Opened do objeto armazenamento. Eles são ainda válido e pode ser usado. No entanto, o IStorage::Commit método faz não alterações confirmação automaticamente para esses elementos aninhados.
A operação confirmação publica apenas alterações conhecidas para o próximo nível mais alto da hierarquia de armazenamento. Portanto, as transações a níveis aninhados devem ser confirmadas para este objeto armazenamento antes que podem ser confirmadas aos níveis mais altos.
Em operações confirmação, você precisa tomar medidas para garantir que dados são protegidos durante o processo confirmação:
- Quando Confirmar alterações aos objetos armazenamento raiz, o chamador deve verificar a valor de retorno para determinar se a operação foi concluída com êxito e se não houver, que o antigo confirmada conteúdo de IStorage interface são ainda intacta e podem ser restaurados.
- Se esse objeto armazenamento foi aberto com alguns de seus itens excluídos, em seguida, o chamador é responsável por regravação-los antes chamado confirmação. Gravar modo é exigido no armazenamento abrindo para a confirmação seja bem-sucedida.
- A menos que proibindo múltiplo gravadores simultâneas no objeto de armazenamento mesmo, um aplicativo chamado esse método deve especificar no mínimo STGC_ONLYIFCURRENT na grfCommitFlags parâmetro para evitar que as alterações feitas por um gravador de inadvertidamente substituir as alterações feitas pelo outro.
Se não for o sinalizador STGC_CONSOLIDATE com suporte por uma implementação armazenamento, em seguida, chamado IStorage::Commit Com STGC_CONSOLIDATE especificado na grfCommitFlags o valor STG_E_INVALIDFLAG parameterreturns.
Para determinar se a plataforma oferece suporte a esta interface, consulte Determinando suporte COM APIs.
Requirements
Header | objidl.h, objidl.idl |
Library | ole32.lib, uuid.lib |
Windows Embedded CE | Windows CE 2.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |