]> wimlib.net Git - wimlib/blobdiff - src/win32_common.c
Add experimental support for Windows VSS
[wimlib] / src / win32_common.c
index 3b0d9e842978f04ed354670e31760a0e585c7a85..b8ac2197827998bd32d4c38c41018056854e84f3 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "wimlib/error.h"
 #include "wimlib/util.h"
+#include "wimlib/win32_vss.h"
 
 static bool
 win32_modify_privilege(const wchar_t *privilege, bool enable)
@@ -316,6 +317,8 @@ out_drop_privs:
 void
 win32_global_cleanup(void)
 {
+       vss_global_cleanup();
+
        if (acquired_privileges)
                win32_release_capture_and_apply_privileges();
 
@@ -407,7 +410,10 @@ win32_try_to_attach_wof(const wchar_t *drive)
        if (func_FilterAttach) {
                HRESULT res;
 
-               res = (*func_FilterAttach)(L"WoF", drive, NULL, 0, NULL);
+               res = (*func_FilterAttach)(L"wof", drive, NULL, 0, NULL);
+
+               if (res != S_OK)
+                       res = (*func_FilterAttach)(L"wofadk", drive, NULL, 0, NULL);
 
                if (res == S_OK)
                        retval = true;
@@ -446,9 +452,11 @@ retry:
        if (n >= buflen)
                goto realloc;
 
-       ret = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
-                           NULL,
-                           is_ntstatus ? (*func_RtlNtStatusToDosError)(code) : code,
+       ret = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
+                               FORMAT_MESSAGE_IGNORE_INSERTS |
+                               (is_ntstatus ? FORMAT_MESSAGE_FROM_HMODULE : 0),
+                           (is_ntstatus ? ntdll_spec.handle : NULL),
+                           code,
                            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                            &buf[n],
                            buflen - n,