Auf Englisch lesen

Freigeben über


IStorage-Compound Dateiimplementierung

Die zusammengesetzte Dateiimplementierung von IStorage ermöglicht ihnen das Erstellen und Verwalten von Unterspeichern und Datenströmen innerhalb eines Speicherobjekts, das sich in einem zusammengesetzten Dateiobjekt befindet. Rufen Sie die API-Funktion StgCreateStorageExauf, um ein zusammengesetztes Dateiobjekt zu erstellen und einen IStorage Zeiger abzurufen. Rufen Sie StgOpenStorageExauf, um ein vorhandenes Verbunddateiobjekt zu öffnen und dessen Stamm-IStorage Zeiger abzurufen.

Anwendungen, die zusammengesetzten Speicher 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" Anwendungsregistrierung.

Wann verwendet werden soll

Die meisten Anwendungen verwenden diese Implementierung, um Speicher und Datenströme zu erstellen und zu verwalten.

Methodik

IStorage::CreateStream-

Erstellt und öffnet ein Datenstromobjekt mit dem angegebenen Namen, der in diesem Speicherobjekt enthalten ist. Der Name darf maximal 31 Zeichen lang sein (nicht einschließlich des Zeichenfolgenterminators). Die 000 bis 01f Zeichen, die als erstes Zeichen des Datenstrom-/Speichernamens dienen, sind für die Verwendung durch OLE reserviert. Dies ist eine zusammengesetzte Dateieinschränkung, keine strukturierte Speichereinschränkung. Die com-bereitgestellte Verbunddateiimplementierung der IStorage::CreateStream-Methode unterstützt nicht die folgenden Verhaltensweisen:

  • Das STGM_DELETEONRELEASE-Flag wird nicht unterstützt.
  • Der Transacted-Modus (STGM_TRANSACTED) wird für Streamobjekte nicht unterstützt.
  • Das Ö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 innerhalb dieses Speicherobjekts mithilfe der zugriffsmodi, die im grfMode Parameter angegeben sind. Die 000 bis 01f Zeichen, die als erstes Zeichen des Datenstrom-/Speichernamens dienen, sind für die Verwendung durch OLE reserviert. Dies ist eine zusammengesetzte Dateieinschränkung, keine strukturierte Speichereinschränkung. Die com-bereitgestellte Verbunddateiimplementierung der IStorage::OpenStream-Methode unterstützt nicht das folgende Verhalten:

  • Das STGM_DELETEONRELEASE-Flag.
  • Transacted mode (STGM_TRANSACTED) for stream objects.
  • Öffnen desselben Datenstroms mehrmals aus demselben 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 maximal 31 Zeichen lang sein (nicht einschließlich des Zeichenfolgenterminators). Die 000 bis 01f Zeichen, die als erstes Zeichen des Datenstrom-/Speichernamens dienen, sind für die Verwendung durch OLE reserviert. Dies ist eine zusammengesetzte Dateieinschränkung, keine strukturierte Speichereinschränkung. Die com-bereitgestellte Verbunddateiimplementierung der IStorage::CreateStorage Methode unterstützt nicht das folgende Verhalten:

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

IStorage::OpenStorage

Öffnet ein vorhandenes Speicherobjekt mit dem angegebenen Namen im angegebenen Zugriffsmodus. Die 000 bis 01f Zeichen, die als erstes Zeichen des Datenstrom-/Speichernamens dienen, sind für die Verwendung durch OLE reserviert. Dies ist eine zusammengesetzte Dateieinschränkung, keine strukturierte Speichereinschränkung. Die com-bereitgestellte Verbunddateiimplementierung der IStorage::OpenStorage Methode unterstützt nicht das folgende Verhalten:

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

IStorage::CopyTo

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

IStorage::MoveElementTo

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

IStorage::Commit

Stellt sicher, dass alle Änderungen, die an einem Speicherobjekt vorgenommen wurden, im Transaktionsmodus im übergeordneten Speicher widergespiegelt werden; für einen Stammspeicher spiegelt die Änderungen am 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 Auswirkung, außer alle Speicherpuffer auf den Datenträger zu leeren. Bei Nichtroot-Speicherobjekten im direkten Modus hat diese Methode keine Auswirkung.

Die implementierung von COM bereitgestellte Verbunddateien verwendet einen zweistufigen Commitprozess, es sei denn, STGC_OVERWRITE wird im grfCommitFlags Parameter angegeben. Dieser zweistufige Prozess stellt die Stabilität von 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 ein neuer Speicherplatz zugewiesen. Nachdem dieser Schritt abgeschlossen wurde, wird eine Tabelle in der Datei mithilfe eines Schreibvorgangs mit nur einem Sektor aktualisiert, um anzugeben, dass die neuen Daten anstelle des alten verwendet werden sollen. Die alten Daten werden zum freien Speicherplatz, der beim nächsten Commit-Vorgang verwendet werden soll. Daher sind die alten Daten verfügbar und können wiederhergestellt werden, wenn beim Commit von Änderungen ein Fehler auftritt. Wenn STGC_OVERWRITE angegeben ist, wird ein einzelner Phasen-Commit-Vorgang verwendet. Weitere Informationen zu Transacted Mode Flags finden Sie unter STGC Enumeration.

IStorage:: zurücksetzen

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

IStorage::EnumElements

Erstellt und ruft einen Zeiger auf ein Enumerationsobjekt ab, das zum Aufzählen des Speicher- und Datenstromobjekts in diesem Speicherobjekt verwendet werden kann. Die com-bereitgestellte Verbunddateiimplementierung erstellt eine Momentaufnahme dieser Informationen. Daher werden Änderungen an den Datenströmen und Speicher erst dann im Enumerator widerzuspiegeln, wenn ein neuer Enumerator abgerufen wird.

IStorage::D estroyElement

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

IStorage::RenameElement

Benennt den angegebenen Unterspeicher oder Datenstrom in diesem Speicherobjekt um. Die 000 bis 01f Zeichen, die als erstes Zeichen des Datenstrom-/Speichernamens dienen, sind für die Verwendung durch OLE reserviert. Dies ist eine zusammengesetzte Dateieinschränkung, keine strukturierte Speichereinschränkung.

IStorage::SetElementTimes

Legt die Änderungs-, Zugriffs- und Erstellungszeiten des angegebenen Speicherelements fest. Die com-bereitgestellte Verbunddateiimplementierung verwaltet Änderungs- und Änderungszeiten für interne Speicherobjekte. Stammspeicherobjekte unterstützen das vom zugrunde liegenden Dateisystem (oder von ILockBytes). Die Verbunddateiimplementierung verwaltet keine Zeitstempel für interne Datenströme. Nicht unterstützte Zeitstempel werden als Null gemeldet, sodass der Anrufer den Support testen kann.

IStorage::SetClass

Weist diesem Speicherobjekt die angegebene CLSID zu.

IStorage::SetStateBits

Speichert bis zu 32 Bits von Statusinformationen in diesem Speicherobjekt. Der von dieser Methode festgelegte Zustand ist nur für die externe Verwendung vorgesehen. Die 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 im grfMode Parameter des StgCreateStorageEx- oder StgOpenStorageEx--Funktion angegebenen STGM_SIMPLE-Element geöffnet wird. Weitere Informationen zu Einfachen-Modus-Speicher finden Sie unter STGM-Konstanten. Wenn das Simple-Mode-Speicherobjekt aus der StgCreateStorageEx--Funktion abgerufen wurde, kann die CreateStream--Methode aufgerufen werden, aber die OpenStream--Methode kann nicht aufgerufen werden. Wenn das Speicherobjekt für den einfachen Modus von der StgOpenStorageEx--Funktion abgerufen wurde, kann die OpenStream--Methode aufgerufen werden, aber die CreateStream--Methode kann nicht aufgerufen werden.

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

Grenzwerte für die Implementierung zusammengesetzter Dateien

IFillLockBytes

ILockBytes-

IRootStorage-

IStorage-

IStream-

StgCreateDocfile-

StgCreateStorageEx-

StgOpenStorage

StgOpenStorageEx