Share via


IPropertyStorage::Commit-Methode (propidlbase.h)

Die IPropertyStorage::Commit-Methode speichert Änderungen, die an einem Eigenschaftsspeicherobjekt vorgenommen wurden, am übergeordneten Speicherobjekt.

Syntax

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Parameter

[in] grfCommitFlags

Die Flags, die die Bedingungen angeben, unter denen der Commit ausgeführt werden soll. Weitere Informationen zu bestimmten Flags und deren Bedeutungen finden Sie im Abschnitt Hinweise.

Rückgabewert

Diese Methode unterstützt den Standardrückgabewert E_UNEXPECTED sowie Folgendes:

Hinweise

Wie IStorage::Commit stellt die IPropertyStorage::Commit-Methode sicher, dass alle An einem Eigenschaftsspeicherobjekt vorgenommenen Änderungen im übergeordneten Speicher widergespiegelt werden.

Im direkten Modus in der Zusammengesetzten Dateiimplementierung bewirkt ein Aufruf dieser Methode, dass alle Änderungen, die derzeit in den Speicherpuffern enthalten sind, in den zugrunde liegenden Eigenschaftendatenstrom geleert werden. In der Verbunddateiimplementierung für Nichtimple-Eigenschaftssätze wird IStorage::Commit auch für das zugrunde liegende Unterstorageobjekt mit dem übergebenen grfCommitFlags-Parameter aufgerufen.

Im Transaktionsmodus bewirkt diese Methode, dass die Änderungen dauerhaft im persistenten Image des Speicherobjekts widergespiegelt werden. Die Änderungen, die committet werden, müssen an diesem Eigenschaftssatz vorgenommen worden sein, seit sie geöffnet wurde oder seit dem letzten Commit für diese Öffnung des Eigenschaftssatzes. Die Commitmethode veröffentlicht die Änderungen, die auf einer Objektebene vorgenommen wurden, auf der nächsten Ebene. Dies unterliegt natürlich jeder Transaktion auf äußerer Ebene, die möglicherweise für das Objekt vorhanden ist, in dem dieser Eigenschaftssatz enthalten ist. Die Schreibberechtigung muss angegeben werden, wenn der Eigenschaftensatz (über IPropertySetStorage) für den Eigenschaftensatz geöffnet wird, der geöffnet wird, damit der Commitvorgang erfolgreich ist.

Wenn der Commitvorgang aus irgendeinem Grund fehlschlägt, bleibt der Zustand des Eigenschaftsspeicherobjekts wie vor dem Commit erhalten.

Dieser Aufruf hat keine Auswirkungen auf vorhandene Speicher- oder Streamwerteigenschaften, die aus diesem Eigenschaftsspeicher geöffnet werden, aber es wird ein Commit ausgeführt.

Gültige Werte für den grfCommitFlags-Parameter sind in der folgenden Tabelle aufgeführt.

Wert Bedeutung
STGC_DEFAULT Commits gemäß der üblichen Transaktionssemantik. Letzter Schreiber gewinnt. Dieses Flag kann nicht mit anderen Flagwerten angegeben werden.
STGC_ONLYIFCURRENT Committent die Änderungen nur, wenn die aktuellen persistenten Inhalte des Eigenschaftssatzes diejenigen sind, auf denen die Änderungen basieren, die über das Commit erfolgen sollen. Das heißt, änderungen werden nicht committen, wenn der Inhalt des Eigenschaftensatzes durch einen Commit von einem anderen Öffnen des Eigenschaftensatzes geändert wurde. Der Fehler STG_E_NOTCURRENT wird zurückgegeben, wenn der Commit aus diesem Grund nicht erfolgreich ist.
STGC_OVERWRITE Nützlich nur beim Commit einer Transaktion, die keine weitere äußere Schachtelungsebene von Transaktionen aufweist, obwohl sie in allen Fällen akzeptabel ist.
Hinweis Gibt an, dass der Aufrufer bereit ist, eine Datenbeschädigung auf Kosten einer verringerten Datenträgerauslastung auf dem Zielvolume zu riskieren. Dieses Flag ist in Szenarien mit wenig Speicherplatz potenziell nützlich, sollte jedoch mit Vorsicht verwendet werden.
 
 
Hinweis Die Verwendung von IPropertyStorage::Commit zum Schreiben von Eigenschaften in Bilddateien unter Windows XP funktioniert nicht. Zu den betroffenen Bilddateiformaten gehören:
  • BMP
  • DIB
  • .emf
  • .gif
  • .ico
  • JFIF
  • JPE
  • JPEG
  • .jpg
  • .png
  • .Rle
  • TIFF
  • .wmf
Aufgrund eines Fehlers im Imagedateieigenschaftenhandler unter Windows XP verwirft der Aufruf von IPropertyStorage::Commit tatsächlich alle vorgenommenen Änderungen, anstatt sie beizubehalten.

Eine Problemumgehung besteht darin,

Lassen Sie den Aufruf von IPropertyStorage::Commit aus. Das Aufrufen von IUnknown::Release für den XP-Imagedateieigenschaftshandler ohne Aufrufen von IPropertyStorage::Committ zuerst implizit die Änderungen an der Datei. Beachten Sie, dass das Aufrufen von IUnknown::Release, ohne zuerst IPropertyStorage:::Commit aufgerufen zu haben, alle vorgenommenen Änderungen verwirft. Diese Problemumgehung ist spezifisch für den Imagedateieigenschaftenhandler unter Windows XP. Beachten Sie auch, dass diese Komponente in späteren Versionen von Windows ordnungsgemäß funktioniert (d. h., dass der Aufruf von IPropertyStorage::Commit Änderungen beibehalten und das Aufrufen von IUnknown::Release ohne Aufruf von IPropertyStorage::Commit verwirft diese).

 

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile propidlbase.h (include Objbase.h, Propidlbase.h)
Bibliothek Uuid.lib
DLL Ole32.dll

Weitere Informationen

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit