IPropertyStorage ::Commit, méthode (propidl.h)

La méthode IPropertyStorage ::Commit enregistre les modifications apportées à un objet de stockage de propriété dans l’objet de stockage parent.

Syntaxe

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Paramètres

[in] grfCommitFlags

Indicateurs qui spécifient les conditions dans lesquelles la validation doit être effectuée. Pour plus d’informations sur des indicateurs spécifiques et leur signification, consultez la section Remarques.

Valeur retournée

Cette méthode prend en charge la valeur de retour standard E_UNEXPECTED, ainsi que les éléments suivants :

Remarques

Comme IStorage ::Commit, la méthode IPropertyStorage ::Commit garantit que toutes les modifications apportées à un objet de stockage de propriété sont répercutées dans le stockage parent.

En mode direct dans l’implémentation de fichier composé, un appel à cette méthode entraîne le vidage de toutes les modifications actuellement apportées aux mémoires tampons dans le flux de propriétés sous-jacent. Dans l’implémentation de fichier composé pour les jeux de propriétés non simples, IStorage ::Commit est également appelé sur l’objet de sous-stockage sous-jacent avec le paramètre grfCommitFlags passé.

En mode transactionné, cette méthode reflète définitivement les modifications dans l’image persistante de l’objet de stockage. Les modifications validées doivent avoir été apportées à ce jeu de propriétés depuis son ouverture ou depuis la dernière validation de cette ouverture du jeu de propriétés. La méthode de validation publie les modifications apportées au niveau d’un objet au niveau suivant. Bien entendu, cela reste soumis à toute transaction de niveau externe qui peut être présente sur l’objet dans lequel ce jeu de propriétés est contenu. L’autorisation d’écriture doit être spécifiée lorsque le jeu de propriétés est ouvert (via IPropertySetStorage) sur le jeu de propriétés ouvrant pour que l’opération de validation réussisse.

Si l’opération de validation échoue pour une raison quelconque, l’état de l’objet de stockage de propriété reste tel qu’il était avant la validation.

Cet appel n’a aucun effet sur les propriétés de stockage ou de flux existantes ouvertes à partir de ce stockage de propriétés, mais il les valide.

Les valeurs valides pour le paramètre grfCommitFlags sont répertoriées dans le tableau suivant.

Valeur Signification
STGC_DEFAULT Valide selon la sémantique de transaction habituelle. Le dernier rédacteur gagne. Cet indicateur ne peut pas être spécifié avec d’autres valeurs d’indicateur.
STGC_ONLYIFCURRENT Valide les modifications uniquement si le contenu persistant actuel du jeu de propriétés est celui sur lequel les modifications sur le point d’être validées sont basées. Autrement dit, ne valide pas les modifications si le contenu du jeu de propriétés a été modifié par un commit d’une autre ouverture du jeu de propriétés. L’erreur STG_E_NOTCURRENT est retournée si la validation ne réussit pas pour cette raison.
STGC_OVERWRITE Utile uniquement lors de la validation d’une transaction qui n’a pas d’autre niveau d’imbrication externe de transactions, bien que acceptable dans tous les cas.
Note Indique que l’appelant est prêt à risquer une altération des données au détriment d’une utilisation réduite du disque sur le volume de destination. Cet indicateur est potentiellement utile dans les scénarios d’espace disque faible, mais il doit être utilisé avec prudence.
 
 
Note L’utilisation de IPropertyStorage ::Commit pour écrire des propriétés dans des fichiers image sur Windows XP ne fonctionne pas. Les formats de fichier image concernés sont les suivants :
  • .bmp
  • .dib
  • .emf
  • .gif
  • .ico
  • .jfif
  • .jpe
  • .jpeg
  • .jpg
  • .png
  • .Rle
  • .tiff
  • .wmf
En raison d’un bogue dans le gestionnaire de propriétés de fichier image sur Windows XP, l’appel de IPropertyStorage ::Commit ignore en fait toutes les modifications apportées au lieu de les rendre persistantes.

Une solution de contournement consiste à

omettez l’appel à IPropertyStorage ::Commit. L’appel de IUnknown ::Release sur le gestionnaire de propriétés de fichier image XP sans appeler IPropertyStorage ::Commit commence par valider implicitement les modifications apportées au fichier. Notez qu’en général, l’appel de IUnknown ::Release sans appeler d’abord IPropertyStorage ::Commit ignore toutes les modifications apportées ; cette solution de contournement est spécifique au gestionnaire de propriétés de fichier image sur Windows XP. Notez également que sur les versions ultérieures de Windows, ce composant fonctionne correctement (autrement dit, l’appel de IPropertyStorage ::Commit conserve les modifications et l’appel de IUnknown ::Release sans appeler IPropertyStorage ::Commit les ignore).

 

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête propidl.h (inclure Objbase.h, Propidlbase.h)
Bibliothèque Uuid.lib
DLL Ole32.dll

Voir aussi

IPropertyStorage

IPropertyStorage ::ReadMultiple

IStorage ::Commit