+/** Set or unset the WIM header flag that marks it read-only
+ * (WIM_HDR_FLAG_READONLY in Microsoft's documentation), based on the
+ * ::wimlib_wim_info.is_marked_readonly member of the @a info parameter. This
+ * is distinct from basic file permissions; this flag can be set on a WIM file
+ * that is physically writable. If this flag is set, all further operations to
+ * modify the WIM will fail, except calling wimlib_overwrite() with
+ * ::WIMLIB_WRITE_FLAG_IGNORE_READONLY_FLAG specified, which is a loophole that
+ * allows you to set this flag persistently on the underlying WIM file.
+ */
+#define WIMLIB_CHANGE_READONLY_FLAG 0x00000001
+
+/** Set the GUID (globally unique identifier) of the WIM file to the value
+ * specified in ::wimlib_wim_info.guid of the @a info parameter. */
+#define WIMLIB_CHANGE_GUID 0x00000002
+
+/** Change the bootable image of the WIM to the value specified in
+ * ::wimlib_wim_info.boot_index of the @a info parameter. */
+#define WIMLIB_CHANGE_BOOT_INDEX 0x00000004
+
+/** Change the WIM_HDR_FLAG_RP_FIX flag of the WIM file to the value specified
+ * in ::wimlib_wim_info.has_rpfix of the @a info parameter. This flag generally
+ * indicates whether an image in the WIM has been captured with reparse-point
+ * fixups enabled. wimlib also treats this flag as specifying whether to do
+ * reparse-point fixups by default when capturing or applying WIM images. */
+#define WIMLIB_CHANGE_RPFIX_FLAG 0x00000008
+
+#define WIMLIB_GUID_LEN 16
+
+/** General information about a WIM file. */
+struct wimlib_wim_info {
+
+ /** Globally unique identifier for the WIM file. Note: all parts of a
+ * split WIM should have an identical value in this field. */
+ uint8_t guid[WIMLIB_GUID_LEN];
+
+ /** Number of images in the WIM. */
+ uint32_t image_count;
+
+ /** 1-based index of the bootable image in the WIM, or 0 if no image is
+ * bootable. */
+ uint32_t boot_index;
+
+ /** Version of the WIM file. */
+ uint32_t wim_version;
+
+ /** Chunk size used for compression. */
+ uint32_t chunk_size;
+
+ /** 1-based index of this part within a split WIM, or 1 if the WIM is
+ * standalone. */
+ uint16_t part_number;
+
+ /** Total number of parts in the split WIM, or 1 if the WIM is
+ * standalone. */
+ uint16_t total_parts;
+
+ /** One of the ::wimlib_compression_type values that specifies the
+ * method used to compress resources in the WIM. */
+ int32_t compression_type;
+
+ /** Size of the WIM file in bytes, excluding the XML data and integrity
+ * table. */
+ uint64_t total_bytes;
+
+ /** 1 if the WIM has an integrity table */
+ uint32_t has_integrity_table : 1;
+
+ /** 1 if the WIM was created via wimlib_open_wim() rather than
+ * wimlib_create_new_wim(). */
+ uint32_t opened_from_file : 1;
+
+ /** 1 if the WIM is considered readonly for any reason. */
+ uint32_t is_readonly : 1;
+
+ /** 1 if reparse-point fixups are supposedly enabled for one or more
+ * images in the WIM. */
+ uint32_t has_rpfix : 1;
+
+ /** 1 if the WIM is marked as read-only. */
+ uint32_t is_marked_readonly : 1;
+
+ /** 1 if the WIM is part of a spanned set. */
+ uint32_t spanned : 1;
+
+ uint32_t write_in_progress : 1;
+ uint32_t metadata_only : 1;
+ uint32_t resource_only : 1;
+ uint32_t reserved_flags : 24;
+ uint32_t reserved[9];
+};
+