+struct wim_xml_info;
+struct blob_table;
+
+/*
+ * WIMStruct - represents a WIM, or a part of a non-standalone WIM
+ *
+ * Note 1: there are three ways in which a WIMStruct can be created:
+ *
+ * 1. open an on-disk WIM file
+ * 2. start to extract a pipable WIM from a file descriptor
+ * 3. create a new WIMStruct directly
+ *
+ * For (1) and (2), the WIMStruct has a backing file; for (3) it does not. For
+ * (1), the backing file is a real "on-disk" file from the filesystem, whereas
+ * for (2) the backing file is a file descriptor which may be a pipe.
+ *
+ * Note 2: although this is the top-level data structure in wimlib, there do
+ * exist cases in which a WIMStruct is not standalone:
+ * - blobs have been referenced from another WIMStruct
+ * - an image has been imported into this WIMStruct from another
+ * (as this references the metadata rather than copies it)
+ *
+ * Note 3: It is unsafe for multiple threads to operate on the same WIMStruct at
+ * the same time. This extends to references to other WIMStructs as noted
+ * above. But besides this, it is safe to operate on *different* WIMStructs in
+ * different threads concurrently.
+ */