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.
Die meisten Anwendungen verwenden diese Implementierung, um Speicher und Datenströme zu erstellen und zu verwalten.
-
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.
-
Ö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.
-
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.
-
Ö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.
-
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.
-
Kopiert oder verschiebt einen Unterspeicher oder Datenstrom aus diesem Speicherobjekt in ein anderes Speicherobjekt.
-
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.
-
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.
-
Entfernt das angegebene Element (Unterspeicher oder Datenstrom) aus diesem Speicherobjekt.
-
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.
-
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.
-
Weist diesem Speicherobjekt die angegebene CLSID zu.
-
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.
-
Ruft die STATSTG- Struktur für dieses geöffnete Speicherobjekt ab.
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.