IStorage-Compound-Dateiimplementierungen

Mit der Verbunddateiimplementierung von IStorage können Sie Unterspeicher und Datenströme in einem Speicherobjekt erstellen und verwalten, das sich in einem Verbunddateiobjekt befindet. Um ein Verbunddateiobjekt zu erstellen und einen IStorage-Zeiger abzurufen, rufen Sie die API-Funktion StgCreateStorageExauf. Um ein vorhandenes Verbunddateiobjekt zu öffnen und seinen IStorage-Stammzeiger abzurufen, rufen Sie StgOpenStorageExauf.

Anwendungen, die Verbundspeicher verwenden, sollten in HKEY _ CLASSES _ ROOT \ SystemFileAssociations registriert werden und ihre eigenen Eigenschaftenhandler bereitstellen. Weitere Informationen finden Sie im Abschnitt "Registrieren von Verben und anderen Dateizuordnungsinformationen" der Anwendungsregistrierung.

Verwendungs wann

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 31 Zeichen nicht überschreiten (ohne das 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 Verbunddateiimplementierungen der IStorage::CreateStream-Methode unterstützen nicht die folgenden Verhaltensweisen:

  • Das STGM _ DELETEONRELEASE-Flag wird nicht unterstützt.
  • Der Transaktionsmodus (STGM _ TRANSACTED) wird für Streamobjekte nicht unterstützt.
  • Das mehrfache Öffnen desselben Streams aus dem gleichen Speicher wird nicht unterstützt. Das Freigabemodusflag STGM _ SHARE EXCLUSIVE muss im _ grfMode-Parameter angegeben werden.

IStorage::OpenStream

Öffnet ein vorhandenes Streamobjekt innerhalb dieses Speicherobjekts mithilfe der im grfMode-Parameter angegebenen Zugriffsmodi. 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 Verbunddateiimplementierungen der IStorage::OpenStream-Methode unterstützen das folgende Verhalten nicht:

  • Das STGM _ DELETEONRELEASE-Flag.
  • Transacted Mode (STGM _ TRANSACTED) für Streamobjekte.
  • Öffnen Sie denselben Stream mehr als einmal aus dem gleichen Speicher. Das STGM _ SHARE _ EXCLUSIVE-Flag muss angegeben werden.

IStorage::CreateStorage

Erstellt und öffnet ein neues Speicherobjekt mit dem angegebenen Namen im angegebenen Zugriffsmodus. Der Name darf 31 Zeichen nicht überschreiten (ohne das 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 Verbunddateiimplementierungen der IStorage::CreateStorage-Methode unterstützen das folgende Verhalten nicht:

  • Das STGM _ PRIORITY-Flag für Nicht-Root-Speicher.
  • Dasselbe Speicherobjekt wird aus demselben übergeordneten Speicher mehr als einmal geöffnet. Das STGM _ SHARE _ EXCLUSIVE-Flag 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 Verbunddateiimplementierungen der IStorage::OpenStorage-Methode unterstützen das folgende Verhalten nicht:

  • Das STGM _ PRIORITY-Flag für Nicht-Root-Speicher.
  • Dasselbe Speicherobjekt wird aus demselben übergeordneten Speicher mehr als einmal geöffnet. Das STGM _ SHARE _ EXCLUSIVE-Flag muss angegeben werden.
  • Das STGM _ DELETEONRELEASE-Flag. Wenn dieses Flag angegeben ist, gibt die Funktion STG _ E _ INVALIDFUNCTION zurück.

IStorage::CopyTo

Kopiert nur die Unterspeicher und Streams dieses offenen Speicherobjekts in ein anderes Speicherobjekt. Der rgiidExclude-Parameter kann auf IID IStream festgelegt _ werden, um nur Untertoragen 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 Änderungen, die an einem im Transaktionsmodus geöffneten Speicherobjekt vorgenommen werden, im übergeordneten Speicher widergespiegelt werden. gibt für einen Stammspeicher die Änderungen am tatsächlichen Gerät wieder. z. B. eine Datei auf dem Datenträger. Für ein im direkten Modus geöffnetes Stammspeicherobjekt hat diese Methode keine Auswirkungen, außer alle Speicherpuffer auf den Datenträger zu leeren. Für Nicht-Root-Speicherobjekte im direkten Modus hat diese Methode keine Auswirkungen.

Die von COM bereitgestellte Verbunddateienimplementierung verwendet einen zweistufigen Commitprozess, es sei denn, STGC _ OVERWRITE wird im grfCommitFlags-Parameter angegeben. Dieser zweistufige Prozess stellt die Stabilität der Daten sicher, falls der Commitvorgang fehlschlägt. Zunächst werden alle neuen Daten in den nicht verwendeten Speicherplatz in der zugrunde liegenden Datei geschrieben. Bei Bedarf wird der Datei neuer Speicherplatz zugeordnet. Nach Abschluss dieses Schritts wird eine Tabelle in der Datei mithilfe eines Schreibvorgangs für einen einzelnen Sektor aktualisiert, um anzugeben, dass die neuen Daten anstelle der alten datenverwendet werden sollen. Die alten Daten werden zum freien Speicherplatz, der beim nächsten Commitvorgang verwendet werden soll. Daher sind die alten Daten verfügbar und können wiederhergestellt werden, wenn beim Committen von Änderungen ein Fehler auftritt. Wenn STGC _ OVERWRITE angegeben wird, wird ein Einphasencommitvorgang 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 einen Zeiger auf ein Enumeratorobjekt und ruft diesen ab, mit dem die in diesem Speicherobjekt enthaltenen Speicher- und Streamobjekte aufzählt werden können. Die von COM bereitgestellte Verbunddateiimplementation erstellt eine Momentaufnahme dieser Informationen. Daher werden Änderungen an streams und storages erst dann im Enumerator widergespiegelt, wenn ein neuer Enumerator abgerufen wird.

IStorage::D estmillElement

Entfernt das angegebene Element (substorage 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 von COM bereitgestellte Verbunddateiimplementierungen verwaltet Änderungs- und Änderungszeiten für interne Speicherobjekte. Stammspeicherobjekte unterstützen alles, was vom zugrunde liegenden Dateisystem (oder von ILockBytes)unterstützt wird. Die Verbunddateiimplementierungen behalten keine Zeitstempel für interne Streams bei. Nicht unterstützte Zeitstempel werden als 0 (null) gemeldet, wodurch der Aufrufer auf Unterstützung testen kann.

IStorage::SetClass

Weist diesem Speicherobjekt die angegebene CLSID zu.

IStorage::SetStateBits

Speichert bis zu 32 Bit an Zustandsinformationen in diesem Speicherobjekt. Der von dieser Methode festgelegte Zustand ist nur für die externe Verwendung vorgesehen. Die von COM bereitgestellte Verbunddateiimplementierungen führen keine Aktionen basierend auf dem Zustand aus.

IStorage::Stat

Ruft die STATSTG-Struktur für dieses offene Speicherobjekt ab.

Hinweise

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 STGM SIMPLE-Element 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 erhalten wurde, kann die CreateStream-Methode aufgerufen werden, die OpenStream-Methode jedoch nicht. Wenn das Speicherobjekt im einfachen Modus von der StgOpenStorageEx-Funktion erhalten wurde, kann die OpenStream-Methode aufgerufen werden, die CreateStream-Methode jedoch nicht.

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

Grenzwerte für die Implementierung von Verbunddatei

IFillLockBytes

Ilockbytes

IRootStorage

Istorage

Istream

StgCreateDocfile

StgCreateStorageEx

StgOpenStorage

StgOpenStorageEx