<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=COM_Structured_Storage</id>
	<title>COM Structured Storage - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=COM_Structured_Storage"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=COM_Structured_Storage&amp;action=history"/>
	<updated>2026-05-05T20:19:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=COM_Structured_Storage&amp;diff=2683777&amp;oldid=prev</id>
		<title>imported&gt;Christian75: Some sources exist</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=COM_Structured_Storage&amp;diff=2683777&amp;oldid=prev"/>
		<updated>2025-03-19T06:05:25Z</updated>

		<summary type="html">&lt;p&gt;Some sources exist&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{short description|Computer technology developed by Microsoft}}&lt;br /&gt;
{{distinguish|Structured storage}}&lt;br /&gt;
{{More footnotes|date=September 2009}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;COM Structured Storage&amp;#039;&amp;#039;&amp;#039; (variously also known as &amp;#039;&amp;#039;[[Component Object Model|COM]] structured storage&amp;#039;&amp;#039; or &amp;#039;&amp;#039;[[Object Linking and Embedding|OLE]] structured storage&amp;#039;&amp;#039;) is a technology developed by [[Microsoft]] as part of its [[Microsoft Windows|Windows]] [[operating system]] for storing hierarchical data within a single file. Strictly speaking, the term &amp;#039;&amp;#039;structured storage&amp;#039;&amp;#039; refers to a set of COM [[Interface (computer science)|interfaces]] that a conforming implementation must provide, and not to a specific implementation, nor to a specific [[Computer file|file]] format (in fact, a structured storage implementation need not store its data in a file at all). In addition to providing a hierarchical structure for data, structured storage may also provide a limited form of [[Atomic transaction|transactional]] support for data access. Microsoft provides an implementation that supports transactions, as well as one that does not (called &amp;#039;&amp;#039;simple-mode&amp;#039;&amp;#039; storage, the latter implementation is limited in other ways as well, although it performs better).&lt;br /&gt;
&lt;br /&gt;
Structured storage is widely used in [[Microsoft Office]] applications, although newer releases (starting with [[Microsoft Office 2007|Office 2007]]) use the [[XML]]-based [[Office Open XML]] by default. It is also an important part of both COM and the related Object Linking and Embedding (OLE) technologies.  Other notable applications of structured storage include [[Microsoft SQL Server|SQL&amp;amp;nbsp;Server]], the Windows shell, and many third-party [[Computer Aided Design|CAD]] programs.&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
Structured storage addresses some inherent difficulties of storing multiple data objects within a single file. One difficulty arises when an object persisted in the file changes in size due to an update. If the application that is reading/writing the file expects the objects in the file to remain in a certain order, everything following that object&amp;#039;s representation in the file may need to be shifted backward to make room if the object grows, or forward to fill in the space left over if the object shrinks. If the file is large, this could result in a costly operation. Of course, there are many possible solutions to this difficulty, but often the application programmer does not want to deal with low level details such as binary file formats.&lt;br /&gt;
&lt;br /&gt;
Structured storage provides an abstraction known as a &amp;#039;&amp;#039;stream&amp;#039;&amp;#039;, represented by the interface &amp;lt;code&amp;gt;IStream&amp;lt;/code&amp;gt;. A stream is conceptually very similar to a file, and the &amp;lt;code&amp;gt;IStream&amp;lt;/code&amp;gt; interface provides methods for reading and writing similar to file input/output. A stream could reside in [[random-access memory|memory]], within a file, within another stream, etc., depending on the implementation. Another important abstraction is that of a &amp;#039;&amp;#039;storage&amp;#039;&amp;#039;, represented by the interface &amp;lt;code&amp;gt;IStorage&amp;lt;/code&amp;gt;. A storage is conceptually very similar to a [[directory (file systems)|directory]] on a [[file system]]. Storages can contain streams, as well as other storages.&lt;br /&gt;
&lt;br /&gt;
If an application wishes to persist several data objects to a file, one way to do so would be to open an &amp;lt;code&amp;gt;IStorage&amp;lt;/code&amp;gt; that represents the contents of that file and save each of the objects within a single &amp;lt;code&amp;gt;IStream&amp;lt;/code&amp;gt;. One way to accomplish the latter is through the standard COM interface &amp;lt;code&amp;gt;IPersistStream&amp;lt;/code&amp;gt;.  OLE depends heavily on this model to embed objects within documents.&lt;br /&gt;
&lt;br /&gt;
==Format==&lt;br /&gt;
{{Main | Compound File Binary Format}}&lt;br /&gt;
&lt;br /&gt;
Microsoft&amp;#039;s implementation uses a file format known as &amp;#039;&amp;#039;compound files&amp;#039;&amp;#039;, and all of the widely deployed structured storage implementations read and write this format.  Compound files use a [[File allocation table|FAT]]-like structure to represent storages and streams. Chunks of the file, known as &amp;#039;&amp;#039;sectors&amp;#039;&amp;#039; (these may or may not correspond to sectors of the underlying file system), are allocated as needed to add new streams and to increase the size of existing streams. If streams are deleted or shrink, leaving unallocated sectors, those sectors can be reused for new streams.&lt;br /&gt;
&lt;br /&gt;
The following applications use the OLE Structured Storage (Compound Document Format)&lt;br /&gt;
* [[Microsoft Office]] [[Office 97|97]]–[[Office 2003|2003]] documents:&lt;br /&gt;
** [[Microsoft Word|Word]] documents (.DOC, .DOT)&lt;br /&gt;
** [[Microsoft Excel|Excel]] spreadsheets (.XLS, .XLT)&lt;br /&gt;
** [[Microsoft PowerPoint|PowerPoint]] presentations (.PPT, .POT)&lt;br /&gt;
** [[Microsoft Publisher|Publisher]] files (.PUB)&lt;br /&gt;
** [[Microsoft Visio|Visio]] files (.VSD)&lt;br /&gt;
** [[Microsoft Project|Project]] files (.MPP)&lt;br /&gt;
** [[Microsoft PhotoDraw]] files (.MIX)&lt;br /&gt;
** [[Microsoft Outlook]] files (.MSG)&lt;br /&gt;
* [[Windows Installer]] files (.MSI, .MSP, .MST)&lt;br /&gt;
* [[Microsoft Picture It!]] / [[Microsoft Digital Image]] files (.MIX)&lt;br /&gt;
* Internet Explorer RSS Feeds Windows RSS Platform files (.feed-ms)&lt;br /&gt;
* Windows 7 StickyNotes (.SNT)&lt;br /&gt;
* Windows 7 jumplists files&lt;br /&gt;
* [[Windows thumbnail cache|Thumbs.db]]&lt;br /&gt;
* Microsoft SQL 2000 Server [[Data Transformation Services|DTS]] packages&lt;br /&gt;
* Autodesk Revit&lt;br /&gt;
* Autodesk Inventor&lt;br /&gt;
* [[FlashPix]]&lt;br /&gt;
*[[Altium Designer]]&lt;br /&gt;
&lt;br /&gt;
==Native Structured Storage==&lt;br /&gt;
During the [[beta testing]] phase of [[Windows 2000]], it included a feature titled &amp;#039;&amp;#039;&amp;#039;Native Structured Storage&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;NSS&amp;#039;&amp;#039;&amp;#039;) for storage of Structured Storage documents (like the binary [[Microsoft Office]] formats and the &amp;lt;code&amp;gt;thumbs.db&amp;lt;/code&amp;gt; file [[Windows Explorer]] uses to cache thumbnails) with each &amp;#039;&amp;#039;Stream&amp;#039;&amp;#039; that makes up a document stored in a separate [[NTFS]] [[Alternate Data Stream|data stream]]. It included utilities that automatically split up the streams in a regular Structured Storage document into NTFS data streams and vice versa. However, the feature was withdrawn after Beta 3 due to incompatibilities with other OS components, and any NSS files automatically converted to the single data stream format.&amp;lt;ref&amp;gt;{{cite web | url = http://www.windowsitpro.com/Article/ArticleID/13785/13785.html | title = What is Native Structured Storage? | access-date = 2007-12-03 | archive-url = https://web.archive.org/web/20070927212324/http://www.windowsitpro.com/Article/ArticleID/13785/13785.html | archive-date = 2007-09-27 | url-status = dead }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementations==&lt;br /&gt;
* For Microsoft .NET:&lt;br /&gt;
** [https://github.com/ironfede/openmcdf OpenMCDF] – Free .NET component for accessing OLE structured storage files, [[Mozilla_Public_License|MPL licensed]].&lt;br /&gt;
*For Linux:&lt;br /&gt;
** [http://www.gnome.org/projects/libgsf/ GNOME Structured File Library] – Can read Microsoft structured storage files.&lt;br /&gt;
** [https://web.archive.org/web/20130429210533/http://pole.berlios.de/ POLE].&lt;br /&gt;
* Cross platform C++ for Window/MacOSX/Linux:&lt;br /&gt;
** [http://www.dimin.net/software/pole/ POLE v3 and up].&lt;br /&gt;
* For Java:&lt;br /&gt;
** [https://web.archive.org/web/20070521192832/http://jakarta.apache.org/poi/poifs/index.html POIFS] – Java implementation of the OLE 2 Compound Document format, part of [[Apache POI]].&lt;br /&gt;
* For Perl:&lt;br /&gt;
** [https://web.archive.org/web/20091016040350/http://user.cs.tu-berlin.de/~schwartz/pmh/index.html LAOLA Binary Structures]&lt;br /&gt;
* For JavaScript:&lt;br /&gt;
** [https://github.com/SheetJS/js-cfb js-cfb] – JavaScript implementation of the OLE 2 Compound Document format.&lt;br /&gt;
* For Python:&lt;br /&gt;
** [https://github.com/waveform-computing/compoundfiles compoundfiles] – Python implementation of the Microsoft Compound File Binary (CFB) format.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*{{official website|http://msdn.microsoft.com/en-us/library/aa380369%28VS.85%29.aspx}}&lt;br /&gt;
*[http://msdn.microsoft.com/en-us/library/dd942138.aspx Open Specifications: Compound File Binary File Format]&lt;br /&gt;
{{Windows Components}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Microsoft application programming interfaces]]&lt;br /&gt;
[[Category:Computer file formats]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Christian75</name></author>
	</entry>
</feed>