X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=programs%2Fimagex.c;h=c8fa94af86a9ab7ee6a58ef873564465260f6de6;hp=1972505824766aaad8be23eb9b91d5175ff0dcbf;hb=00334bdf09071e65e340eeeb6f3900c79a262649;hpb=2a33c303e30fd740f740e21632fd06b9e414b0c7 diff --git a/programs/imagex.c b/programs/imagex.c index 19725058..c8fa94af 100644 --- a/programs/imagex.c +++ b/programs/imagex.c @@ -38,6 +38,7 @@ #include #include #include +#include #ifdef HAVE_ALLOCA_H #include @@ -900,11 +901,17 @@ static int imagex_apply(int argc, char **argv) } } +#ifdef __WIN32__ + win32_acquire_restore_privileges(); +#endif ret = wimlib_extract_image(w, image, target, extract_flags, additional_swms, num_additional_swms, imagex_progress_func); if (ret == 0) printf("Done applying WIM image.\n"); +#ifdef __WIN32__ + win32_release_restore_privileges(); +#endif out: wimlib_free(w); if (additional_swms) { @@ -1081,6 +1088,9 @@ static int imagex_capture_or_append(int argc, char **argv) } } } +#ifdef __WIN32__ + win32_acquire_capture_privileges(); +#endif ret = wimlib_add_image_multisource(w, capture_sources, num_sources, name, @@ -1091,17 +1101,17 @@ static int imagex_capture_or_append(int argc, char **argv) add_image_flags, imagex_progress_func); if (ret != 0) - goto out; + goto out_release_privs; cur_image = wimlib_get_num_images(w); if (desc) { ret = wimlib_set_image_descripton(w, cur_image, desc); if (ret != 0) - goto out; + goto out_release_privs; } if (flags_element) { ret = wimlib_set_image_flags(w, cur_image, flags_element); if (ret != 0) - goto out; + goto out_release_privs; } if (cmd == APPEND) { ret = wimlib_overwrite(w, write_flags, num_threads, @@ -1114,6 +1124,10 @@ static int imagex_capture_or_append(int argc, char **argv) ret = 0; if (ret != 0) imagex_error("Failed to write the WIM file `%s'", wimfile); +out_release_privs: +#ifdef __WIN32__ + win32_release_capture_privileges(); +#endif out: wimlib_free(w); free(config_str); @@ -2107,6 +2121,8 @@ int main(int argc, char **argv) const struct imagex_command *cmd; int ret; + setlocale(LC_ALL, ""); + if (argc < 2) { imagex_error("No command specified"); usage_all();