IStorage-Compound-Dateiimplementierung

Die Verbunddateiimplementierung von IStorage ermöglicht es Ihnen, Unterspeicher und Datenströme in einem Speicherobjekt zu erstellen und zu verwalten, das sich in einem Verbunddateiobjekt befindet. Um ein zusammengesetztes Dateiobjekt zu erstellen und einen IStorage-Zeiger abzurufen, rufen Sie die API-Funktion StgCreateStorageEx auf. Rufen Sie StgOpenStorageEx auf, um ein vorhandenes zusammengesetztes Dateiobjekt zu öffnen und dessen IStorage-Stammzeiger abzurufen.

Anwendungen, die zusammengesetzten Speicher verwenden, sollten in HKEY_CLASSES_ROOT\SystemFileAssociations registriert werden und eigene Eigenschaftenhandler bereitstellen. Weitere Informationen finden Sie im Abschnitt "Registrieren von Verben und anderen Dateizuordnungsinformationen" der Anwendungsregistrierung.

Einsatzgebiet

Die meisten Anwendungen verwenden diese Implementierung, um Speicher und Streams zu erstellen und zu verwalten.

Methoden

IStorage::CreateStream

Erstellt und öffnet ein Streamobjekt mit dem angegebenen Namen, der in diesem Speicherobjekt enthalten ist. Der Name darf nicht länger als 31 Zeichen sein (ohne Zeichenfolgenabschlusszeichen). Die Zeichen 000 bis 01f, welche als erste Zeichen des Namens des Datenstroms/Speichers dienen, sind durch die OLE für die Benutzung reserviert. Dies ist eine Verbunddateieinschränkung, keine strukturierte Speichereinschränkung. Die von COM bereitgestellte Verbunddateiimplementierung der IStorage::CreateStream-Methode unterstützt die folgenden Verhaltensweisen nicht:

  • Das STGM_DELETEONRELEASE-Flag wird nicht unterstützt.
  • Der Transacted-Modus (STGM_TRANSACTED) wird für Streamobjekte nicht unterstützt.
  • Das mehrmalsige Öffnen desselben Datenstroms aus demselben Speicher wird nicht unterstützt. Das flag STGM_SHARE_EXCLUSIVE Freigabemodus muss im grfMode-Parameter angegeben werden.

IStorage::OpenStream

Öffnet ein vorhandenes Streamobjekt in diesem Speicherobjekt unter Verwendung der zugriffsmodi, die im grfMode-Parameter angegeben sind. Die Zeichen 000 bis 01f, welche als erste Zeichen des Namens des Datenstroms/Speichers dienen, sind durch die OLE für die Benutzung reserviert. Dies ist eine Verbunddateieinschränkung, keine strukturierte Speichereinschränkung. Die von COM bereitgestellte Verbunddateiimplementierung der IStorage::OpenStream-Methode unterstützt das folgende Verhalten nicht:

  • Das STGM_DELETEONRELEASE-Flag.
  • Transacted Mode (STGM_TRANSACTED) für Streamobjekte.
  • Öffnen sie denselben Stream mehrmals aus demselben Speicher. Das flag STGM_SHARE_EXCLUSIVE muss angegeben werden.

IStorage::CreateStorage

Erstellt und öffnet ein neues Speicherobjekt mit dem angegebenen Namen im angegebenen Zugriffsmodus. Der Name darf nicht länger als 31 Zeichen sein (ohne Zeichenfolgenabschlusszeichen). Die Zeichen 000 bis 01f, welche als erste Zeichen des Namens des Datenstroms/Speichers dienen, sind durch die OLE für die Benutzung reserviert. Dies ist eine Verbunddateieinschränkung, keine strukturierte Speichereinschränkung. Die von COM bereitgestellte Verbunddateiimplementierung der IStorage::CreateStorage-Methode unterstützt das folgende Verhalten nicht:

  • Das STGM_PRIORITY-Flag für Nicht-Stammspeicher.
  • Dasselbe Speicherobjekt wird mehrmals aus demselben übergeordneten Speicher geöffnet. Das flag STGM_SHARE_EXCLUSIVE muss angegeben werden.
  • Das STGM_DELETEONRELEASE-Flag. Wenn dieses Flag angegeben ist, gibt die Funktion STG_E_INVALIDFLAG zurück.

IStorage::OpenStorage

Öffnet ein vorhandenes Speicherobjekt mit dem angegebenen Namen im angegebenen Zugriffsmodus. Die Zeichen 000 bis 01f, welche als erste Zeichen des Namens des Datenstroms/Speichers dienen, sind durch die OLE für die Benutzung reserviert. Dies ist eine Verbunddateieinschränkung, keine strukturierte Speichereinschränkung. Die von COM bereitgestellte Verbunddateiimplementierung der IStorage::OpenStorage-Methode unterstützt das folgende Verhalten nicht:

  • Das STGM_PRIORITY-Flag für Nicht-Stammspeicher.
  • Dasselbe Speicherobjekt wird mehrmals aus demselben übergeordneten Speicher geöffnet. Das flag STGM_SHARE_EXCLUSIVE muss angegeben werden.
  • Das STGM_DELETEONRELEASE-Flag. Wenn dieses Flag angegeben wird, gibt die Funktion STG_E_INVALIDFUNCTION zurück.

IStorage::CopyTo

Kopiert nur die Unterspeicher und Streams dieses geöffneten Speicherobjekts in ein anderes Speicherobjekt. Der Parameter rgiidExclude kann auf IID_IStream festgelegt werden, um nur Unterspeicher zu kopieren, oder auf IID_IStorage, um nur Streams zu kopieren.

IStorage::MoveElementTo

Kopiert oder verschiebt einen Unterspeicher oder Stream aus diesem Speicherobjekt in ein anderes Speicherobjekt.

IStorage::Commit

Stellt sicher, dass alle An einem im Transaktionsmodus geöffneten Speicherobjekt vorgenommenen Änderungen im übergeordneten Speicher widergespiegelt werden. für einen Stammspeicher die Änderungen auf dem tatsächlichen Gerät wider; z. B. eine Datei auf dem Datenträger. Bei einem Im direkten Modus geöffneten Stammspeicherobjekt hat diese Methode keine Auswirkungen, außer alle Speicherpuffer auf den Datenträger zu leeren. Für Speicherobjekte ohne Stamm im direkten Modus hat diese Methode keine Auswirkungen.

Die von COM bereitgestellte Implementierung zusammengesetzter Dateien verwendet einen zweistufigen Commitprozess, es sei denn, STGC_OVERWRITE ist im grfCommitFlags-Parameter angegeben. Dieser zweistufige Prozess stellt die Stabilität der Daten für den Fall sicher, dass der Commitvorgang fehlschlägt. Zunächst werden alle neuen Daten in den nicht verwendeten Speicherplatz in der zugrunde liegenden Datei geschrieben. Falls erforderlich, wird der Datei neuer Speicherplatz zugewiesen. Nachdem dieser Schritt abgeschlossen wurde, wird eine Tabelle in der Datei mithilfe eines Schreibvorgangs mit einem einzelnen Sektor aktualisiert, um anzugeben, dass die neuen Daten anstelle der alten verwendet werden sollen. Die alten Daten werden zu freiem Speicherplatz, der beim nächsten Commitvorgang verwendet werden kann. Daher sind die alten Daten verfügbar und können wiederhergestellt werden, wenn beim Committen von Änderungen ein Fehler auftritt. Wenn STGC_OVERWRITE angegeben ist, wird ein commitvorgang mit einer einzelnen Phase verwendet. Weitere Informationen zu Flags im Transaktionsmodus finden Sie unter STGC-Enumeration .

IStorage::Revert

Verwirft alle Änderungen, die seit dem letzten Commitvorgang am Speicherobjekt vorgenommen wurden.

IStorage::EnumElements

Erstellt und ruft einen Zeiger auf ein Enumeratorobjekt ab, das zum Aufzählen der in diesem Speicherobjekt enthaltenen Speicher- und Streamobjekte verwendet werden kann. Die von COM bereitgestellte Verbunddateiimplementierung akzeptiert eine Momentaufnahme dieser Informationen. Daher werden Änderungen an den Streams und Speichern erst im Enumerator wider, wenn ein neuer Enumerator abgerufen wird.

IStorage::D estroyElement

Entfernt das angegebene Element (Unterspeicher oder Stream) aus diesem Speicherobjekt.

IStorage::RenameElement

Benennt den angegebenen Unterspeicher oder Stream in diesem Speicherobjekt um. Die Zeichen 000 bis 01f, welche als erste Zeichen des Namens des Datenstroms/Speichers dienen, sind durch die OLE für die Benutzung reserviert. Dies ist eine Verbunddateieinschränkung, keine strukturierte Speichereinschränkung.

IStorage::SetElementTimes

Legt die Änderungs-, Zugriffs- und Erstellungszeiten des angegebenen Speicherelements fest. Die com-bereitgestellte Verbunddateiimplementierung behält die Änderungs- und Änderungszeiten für interne Speicherobjekte bei. Stammspeicherobjekte unterstützen alles, was vom zugrunde liegenden Dateisystem (oder von ILockBytes) unterstützt wird. Die Verbunddateiimplementierung verwaltet keine Zeitstempel für interne Streams. Nicht unterstützte Zeitstempel werden als null gemeldet, sodass der Aufrufer auf Unterstützung testen kann.

IStorage::SetClass

Weist diesem Speicherobjekt die angegebene CLSID zu.

IStorage::SetStateBits

Speichert bis zu 32 Bits von Zustandsinformationen in diesem Speicherobjekt. Der von dieser Methode festgelegte Zustand ist nur für die externe Verwendung vorgesehen. Die von COM bereitgestellte Verbunddateiimplementierung führt keine Aktion basierend auf dem Zustand aus.

IStorage::Stat

Ruft die STATSTG-Struktur für dieses geöffnete Speicherobjekt ab.

Bemerkungen

Wenn das Speicherobjekt im einfachen Modus geöffnet wird, ist die Verwendung der oben genannten Methoden eingeschränkt. Ein Speicher befindet sich im einfachen Modus, wenn er mit dem element STGM_SIMPLE geöffnet wird, das im grfMode-Parameter der StgCreateStorageEx - oder StgOpenStorageEx-Funktion angegeben ist. Weitere Informationen zu Speicher im einfachen Modus finden Sie unter STGM-Konstanten. Wenn das Speicherobjekt im einfachen Modus von der StgCreateStorageEx-Funktion abgerufen wurde, kann die CreateStream-Methode aufgerufen werden, aber die OpenStream-Methode nicht. Wenn das Speicherobjekt im einfachen Modus von der StgOpenStorageEx-Funktion abgerufen wurde, kann die OpenStream-Methode aufgerufen werden, aber die CreateStream-Methode nicht.

Wenn ein Speicherobjekt im einfachen Modus zum Erstellen eines Datenstroms verwendet wird, beträgt die Mindestgröße dieses Datenstroms in der Regel 4096 Bytes. Wenn weniger Daten in den Stream geschrieben werden, wird die Größe auf 4096 Bytes aufgerundet.

Implementierungsgrenzwerte für zusammengesetzte Dateien

IFillLockBytes

ILockBytes

IRootStorage

IStorage

IStream

StgCreateDocfile

StgCreateStorageEx

StgOpenStorage

StgOpenStorageEx