]> wimlib.net Git - wimlib/blobdiff - include/wimlib.h
vss: note that it's only supported on Vista and later
[wimlib] / include / wimlib.h
index cdc298891e05a4d09ed7e22f22c559430a440e40..f2e9f22940b2b5303cac1341dbc5fe007b325dc8 100644 (file)
@@ -3,7 +3,7 @@
  * @brief External header for wimlib.
  *
  * This file contains comments for generating documentation with Doxygen.  The
- * built HTML documentation can be viewed at http://wimlib.net/apidoc.  Make
+ * built HTML documentation can be viewed at https://wimlib.net/apidoc.  Make
  * sure to see the <a href="modules.html">Modules page</a> to make more sense of
  * the declarations in this header.
  */
 /**
  * @mainpage
  *
- * This is the documentation for the library interface of wimlib 1.8.2, a C
+ * This is the documentation for the library interface of wimlib 1.8.3, a C
  * library for creating, modifying, extracting, and mounting files in the
  * Windows Imaging Format.  This documentation is intended for developers only.
  * If you have installed wimlib and want to know how to use the @b wimlib-imagex
  * program, please see the manual pages and also the <a
- * href="http://wimlib.net/gitlist/wimlib/blob/master/README">README
+ * href="https://wimlib.net/gitlist/wimlib/blob/master/README">README
  * file</a>.
  *
  * @section sec_installing Installing
  *
  * @subsection UNIX
  *
- * Download the source code from http://wimlib.net.  Install the library by
+ * Download the source code from https://wimlib.net.  Install the library by
  * running <c>configure && make && sudo make install</c>.  See the README for
  * information about configuration options.  To use wimlib in your program after
  * installing it, include wimlib.h and link your program with <c>-lwim</c>.
@@ -32,8 +32,8 @@
  *
  * Download the Windows binary distribution with the appropriate architecture
  * (i686 or x86_64 --- also called "x86" and "amd64" respectively) from
- * http://wimlib.net.  Link your program with the libwim-15.dll file.  Make sure
- * to also download the source code so you can get wimlib.h, as it is not
+ * https://wimlib.net.  Link your program with the libwim-15.dll file.  Make
+ * sure to also download the source code so you can get wimlib.h, as it is not
  * included in the binary distribution.  If you need to access the DLL from
  * other programming languages, note that the calling convention is "cdecl".
  *
@@ -43,8 +43,8 @@
  * distribution.
  *
  * There is also the <a
- * href="http://wimlib.net/gitlist/wimlib/blob/master/programs/imagex.c"> source
- * code of <b>wimlib-imagex</b></a>, which is complicated but uses most
+ * href="https://wimlib.net/gitlist/wimlib/blob/master/programs/imagex.c">
+ * source code of <b>wimlib-imagex</b></a>, which is complicated but uses most
  * capabilities of wimlib.
  *
  * @section backwards_compatibility Backwards Compatibility
 #define WIMLIB_MINOR_VERSION 8
 
 /** Patch version of the library (for example, the 5 in 1.2.5). */
-#define WIMLIB_PATCH_VERSION 2
+#define WIMLIB_PATCH_VERSION 3
 
 #ifdef __cplusplus
 extern "C" {
@@ -1721,6 +1721,11 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour
  *
  * Note: ::WIMLIB_ADD_FLAG_WIMBOOT does something different from, and
  * independent from, ::WIMLIB_ADD_FLAG_BOOT.
+ *
+ * Since wimlib v1.8.3, ::WIMLIB_ADD_FLAG_WIMBOOT also causes offline WIM-backed
+ * files to be added as the "real" files rather than as their reparse points,
+ * provided that their data is already present in the WIM.  This feature can be
+ * useful when updating a backing WIM file in an "offline" state.
  */
 #define WIMLIB_ADD_FLAG_WIMBOOT                        0x00001000
 
@@ -1742,6 +1747,19 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour
  */
 #define WIMLIB_ADD_FLAG_TEST_FILE_EXCLUSION    0x00004000
 
+/**
+ * EXPERIMENTAL, since wimlib v1.9.0: create a temporary filesystem snapshot of
+ * the source directory and add the files from it.  Currently, this option is
+ * only supported on Windows (Vista and later), where it uses the Volume Shadow
+ * Copy Service (VSS).  Using this option, you can create a consistent backup of
+ * the system volume of a running Windows system without running into problems
+ * with locked files.  For the VSS snapshot to be successfully created, your
+ * application must be run as an Administrator, and it cannot be run in WoW64
+ * mode (i.e. if Windows is 64-bit, then your application must be 64-bit as
+ * well).
+ */
+#define WIMLIB_ADD_FLAG_SNAPSHOT               0x00008000
+
 /* Note: the WIMLIB_ADD_IMAGE_FLAG names are retained for source compatibility.
  * Use the WIMLIB_ADD_FLAG names in new code.  */
 #define WIMLIB_ADD_IMAGE_FLAG_NTFS             WIMLIB_ADD_FLAG_NTFS
@@ -2493,11 +2511,14 @@ enum wimlib_error_code {
        WIMLIB_ERR_MOUNTED_IMAGE_IS_BUSY              = 79,
        WIMLIB_ERR_NOT_A_MOUNTPOINT                   = 80,
        WIMLIB_ERR_NOT_PERMITTED_TO_UNMOUNT           = 81,
-       WIMLIB_ERR_FVE_LOCKED_VOLUME                  = 82,
+       WIMLIB_ERR_FVE_LOCKED_VOLUME                  = 82,
        WIMLIB_ERR_UNABLE_TO_READ_CAPTURE_CONFIG      = 83,
-       WIMLIB_ERR_WIM_IS_INCOMPLETE                  = 84,
+       WIMLIB_ERR_WIM_IS_INCOMPLETE                  = 84,
        WIMLIB_ERR_COMPACTION_NOT_POSSIBLE            = 85,
        WIMLIB_ERR_IMAGE_HAS_MULTIPLE_REFERENCES      = 86,
+       WIMLIB_ERR_DUPLICATE_EXPORTED_IMAGE           = 87,
+       WIMLIB_ERR_CONCURRENT_MODIFICATION_DETECTED   = 88,
+       WIMLIB_ERR_SNAPSHOT_FAILURE                   = 89,
 };
 
 
@@ -2757,6 +2778,9 @@ wimlib_delete_path(WIMStruct *wim, int image,
  *
  * @return 0 on success; a ::wimlib_error_code value on failure.
  *
+ * @retval ::WIMLIB_ERR_DUPLICATE_EXPORTED_IMAGE
+ *     One or more of the source images had already been exported into the
+ *     destination WIM.
  * @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION
  *     One or more of the names being given to an exported image was already in
  *     use in the destination WIM.
@@ -3123,19 +3147,8 @@ wimlib_get_error_string(enum wimlib_error_code code);
 /**
  * @ingroup G_wim_information
  *
- * Get the description of the specified image.
- *
- * @param wim
- *     Pointer to the ::WIMStruct to query.  This need not represent a
- *     standalone WIM (e.g. it could represent part of a split WIM).
- * @param image
- *     The 1-based index of the image for which to query the description.
- *
- * @return
- *     The description of the image, or @c NULL if there is no such image, or
- *     @c NULL if the specified image has no description.  The string may not
- *     remain valid after later library calls, so the caller should duplicate
- *     it if needed.
+ * Get the description of the specified image.  Equivalent to
+ * <tt>wimlib_get_image_property(wim, image, "DESCRIPTION")</tt>.
  */
 extern const wimlib_tchar *
 wimlib_get_image_description(const WIMStruct *wim, int image);
@@ -3143,18 +3156,10 @@ wimlib_get_image_description(const WIMStruct *wim, int image);
 /**
  * @ingroup G_wim_information
  *
- * Get the name of the specified image.
- *
- * @param wim
- *     Pointer to the ::WIMStruct to query.  This need not represent a
- *     standalone WIM (e.g. it could represent part of a split WIM).
- * @param image
- *     The 1-based index of the image for which to query the name.
- *
- * @return
- *     The name of the image, or @c NULL if there is no such image, or an empty
- *     string if the image is unnamed.  The string may not remain valid after
- *     later library calls, so the caller should duplicate it if needed.
+ * Get the name of the specified image.  Equivalent to
+ * <tt>wimlib_get_image_property(wim, image, "NAME")</tt>, except that
+ * wimlib_get_image_name() will return an empty string if the image is unnamed
+ * whereas wimlib_get_image_property() may return @c NULL in that case.
  */
 extern const wimlib_tchar *
 wimlib_get_image_name(const WIMStruct *wim, int image);
@@ -3176,7 +3181,11 @@ wimlib_get_image_name(const WIMStruct *wim, int image);
  *     "TOTALBYTES".  The name can contain forward slashes to indicate a nested
  *     XML element; for example, "WINDOWS/VERSION/BUILD" indicates the BUILD
  *     element nested within the VERSION element nested within the WINDOWS
- *     element.  The <tt>[</tt> character is reserved for future use.
+ *     element.  Since wimlib v1.9.0, a bracketed number can be used to
+ *     indicate one of several identically-named elements; for example,
+ *     "WINDOWS/LANGUAGES/LANGUAGE[2]" indicates the second "LANGUAGE" element
+ *     nested within the "WINDOWS/LANGUAGES" element.  Note that element names
+ *     are case sensitive.
  *
  * @return
  *     The property's value as a ::wimlib_tchar string, or @c NULL if there is
@@ -3953,20 +3962,8 @@ wimlib_set_error_file_by_name(const wimlib_tchar *path);
 /**
  * @ingroup G_modifying_wims
  *
- * Change the description of a WIM image.
- *
- * @param wim
- *     Pointer to the ::WIMStruct for the WIM.
- * @param image
- *     The 1-based index of the image for which to change the description.
- * @param description
- *     The new description to give the image.  It may be @c NULL, which
- *     indicates that the image is to be given no description.
- *
- * @return 0 on success; a ::wimlib_error_code value on failure.
- *
- * @retval ::WIMLIB_ERR_INVALID_IMAGE
- *     @p image does not exist in @p wim.
+ * Change the description of a WIM image.  Equivalent to
+ * <tt>wimlib_set_image_property(wim, image, "DESCRIPTION", description)</tt>.
  */
 extern int
 wimlib_set_image_descripton(WIMStruct *wim, int image,
@@ -3976,20 +3973,8 @@ wimlib_set_image_descripton(WIMStruct *wim, int image,
  * @ingroup G_modifying_wims
  *
  * Change what is stored in the \<FLAGS\> element in the WIM XML document
- * (usually something like "Core" or "Ultimate")
- *
- * @param wim
- *     Pointer to the ::WIMStruct for the WIM.
- * @param image
- *     The 1-based index of the image for which to change the flags.
- * @param flags
- *     The new \<FLAGS\> element to give the image.  It may be @c NULL, which
- *     indicates that the image is to be given no \<FLAGS\> element.
- *
- * @return 0 on success; a ::wimlib_error_code value on failure.
- *
- * @retval ::WIMLIB_ERR_INVALID_IMAGE
- *     @p image does not exist in @p wim.
+ * (usually something like "Core" or "Ultimate").  Equivalent to
+ * <tt>wimlib_set_image_property(wim, image, "FLAGS", flags)</tt>.
  */
 extern int
 wimlib_set_image_flags(WIMStruct *wim, int image, const wimlib_tchar *flags);
@@ -3997,23 +3982,8 @@ wimlib_set_image_flags(WIMStruct *wim, int image, const wimlib_tchar *flags);
 /**
  * @ingroup G_modifying_wims
  *
- * Change the name of a WIM image.
- *
- * @param wim
- *     Pointer to the ::WIMStruct for the WIM.
- * @param image
- *     The 1-based index of the image for which to change the name.
- * @param name
- *     New name to give the new image.  If @c NULL or empty, the new image is
- *     given no name.  Otherwise, it must specify a name that does not already
- *     exist in @p wim.
- *
- * @return 0 on success; a ::wimlib_error_code value on failure.
- *
- * @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION
- *     The WIM already contains an image with the requested name.
- * @retval ::WIMLIB_ERR_INVALID_IMAGE
- *     @p image does not exist in @p wim.
+ * Change the name of a WIM image.  Equivalent to
+ * <tt>wimlib_set_image_property(wim, image, "NAME", name)</tt>.
  */
 extern int
 wimlib_set_image_name(WIMStruct *wim, int image, const wimlib_tchar *name);
@@ -4033,16 +4003,27 @@ wimlib_set_image_name(WIMStruct *wim, int image, const wimlib_tchar *name);
  * @param property_name
  *     The name of the image property in the same format documented for
  *     wimlib_get_image_property().
+ *     <br/>
+ *     Note: if creating a new element using a bracketed index such as
+ *     "WINDOWS/LANGUAGES/LANGUAGE[2]", the highest index that can be specified
+ *     is one greater than the number of existing elements with that same name,
+ *     excluding the index.  That means that if you are adding a list of new
+ *     elements, they must be added sequentially from the first index (1) to
+ *     the last index (n).
  * @param property_value
  *     If not NULL and not empty, the property is set to this value.
  *     Otherwise, the property is removed from the XML document.
  *
  * @return 0 on success; a ::wimlib_error_code value on failure.
  *
+ * @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION
+ *     The user requested to set the image name (the <tt>NAME</tt> property),
+ *     but another image in the WIM already had the requested name.
  * @retval ::WIMLIB_ERR_INVALID_IMAGE
  *     @p image does not exist in @p wim.
  * @retval ::WIMLIB_ERR_INVALID_PARAM
- *     @p property_name has an unsupported format.
+ *     @p property_name has an unsupported format, or @p property_name included
+ *     a bracketed index that was too high.
  */
 extern int
 wimlib_set_image_property(WIMStruct *wim, int image,
@@ -4470,12 +4451,13 @@ wimlib_update_image(WIMStruct *wim,
  *
  * @return 0 on success; a ::wimlib_error_code value on failure.
  *
+ * @retval ::WIMLIB_ERR_CONCURRENT_MODIFICATION_DETECTED
+ *     A file that had previously been scanned for inclusion in the WIM was
+ *     concurrently modified.
  * @retval ::WIMLIB_ERR_INVALID_IMAGE
  *     @p image did not exist in @p wim.
  * @retval ::WIMLIB_ERR_INVALID_RESOURCE_HASH
- *     A file, stored in another WIM, which needed to be written was corrupt;
- *     or a file that had previously been scanned for inclusion in the WIM was
- *     concurrently modified.
+ *     A file, stored in another WIM, which needed to be written was corrupt.
  * @retval ::WIMLIB_ERR_INVALID_PARAM
  *     @p path was not a nonempty string, or invalid flags were passed.
  * @retval ::WIMLIB_ERR_OPEN