]> wimlib.net Git - wimlib/blobdiff - src/win32_apply.c
mkwinpeimg: Quote $0
[wimlib] / src / win32_apply.c
index 48dd66d319637769b881086ffae72e54581bba1e..557572330946b99118b61d54f12be6fada7b613d 100644 (file)
 #include "wimlib/error.h"
 #include "wimlib/lookup_table.h"
 
-#ifdef WITH_NTDLL
-#  include <winternl.h>
-#  include <ntstatus.h>
-NTSTATUS WINAPI
-NtSetSecurityObject(HANDLE Handle,
-                   SECURITY_INFORMATION SecurityInformation,
-                   PSECURITY_DESCRIPTOR SecurityDescriptor);
-#endif
-
 static int
 win32_start_extract(const wchar_t *path, struct apply_ctx *ctx)
 {
@@ -191,7 +182,7 @@ win32_extract_stream(const wchar_t *path, const wchar_t *stream_name,
                stream_path = alloca(sizeof(wchar_t) *
                                     (wcslen(path) + 1 +
                                      wcslen(stream_name) + 1));
-               swprintf(stream_path, L"%ls:%ls", path, stream_name);
+               tsprintf(stream_path, L"%ls:%ls", path, stream_name);
        }
 
        h = CreateFile(stream_path, FILE_WRITE_DATA, 0, NULL,
@@ -480,13 +471,15 @@ do_win32_set_security_descriptor(HANDLE h, const wchar_t *path,
                                 PSECURITY_DESCRIPTOR desc)
 {
 #ifdef WITH_NTDLL
-       return RtlNtStatusToDosError(NtSetSecurityObject(h, info, desc));
-#else
+       if (func_NtSetSecurityObject) {
+               return (*func_RtlNtStatusToDosError)(
+                               (*func_NtSetSecurityObject)(h, info, desc));
+       }
+#endif
        if (SetFileSecurity(path, info, desc))
                return ERROR_SUCCESS;
        else
                return GetLastError();
-#endif
 }
 
 static int
@@ -503,10 +496,12 @@ win32_set_security_descriptor(const wchar_t *path, const u8 *desc,
        h = INVALID_HANDLE_VALUE;
 
 #ifdef WITH_NTDLL
-       h = win32_open_existing_file(path, MAXIMUM_ALLOWED);
-       if (h == INVALID_HANDLE_VALUE) {
-               ERROR_WITH_ERRNO("Can't open %ls (%u)", path, GetLastError());
-               goto error;
+       if (func_NtSetSecurityObject) {
+               h = win32_open_existing_file(path, MAXIMUM_ALLOWED);
+               if (h == INVALID_HANDLE_VALUE) {
+                       ERROR_WITH_ERRNO("Can't open %ls (%u)", path, GetLastError());
+                       goto error;
+               }
        }
 #endif
 
@@ -536,12 +531,14 @@ win32_set_security_descriptor(const wchar_t *path, const u8 *desc,
                        ctx->no_security_descriptors++;
                        break;
                }
+               SetLastError(err);
                goto error;
        }
        ret = 0;
 out_close:
 #ifdef WITH_NTDLL
-       CloseHandle(h);
+       if (func_NtSetSecurityObject)
+               CloseHandle(h);
 #endif
        return ret;