From: Eric Biggers Date: Thu, 22 May 2014 02:26:10 +0000 (-0500) Subject: Fix path passed to wimboot_set_pointer() X-Git-Tag: v1.7.0~126 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=b996daae67735460fe19ca39029fdc8e2941f186 Fix path passed to wimboot_set_pointer() --- diff --git a/include/wimlib/wimboot.h b/include/wimlib/wimboot.h index 1c4b0fc3..6be4fae2 100644 --- a/include/wimlib/wimboot.h +++ b/include/wimlib/wimboot.h @@ -14,7 +14,7 @@ wimboot_alloc_data_source_id(const wchar_t *wim_path, bool *wof_running_ret); extern int -wimboot_set_pointer(UNICODE_STRING *name, +wimboot_set_pointer(OBJECT_ATTRIBUTES *attr, const wchar_t *printable_path, const struct wim_lookup_table_entry *lte, u64 data_source_id, diff --git a/src/wimboot.c b/src/wimboot.c index d5cfe4d8..914f20fb 100644 --- a/src/wimboot.c +++ b/src/wimboot.c @@ -1040,10 +1040,10 @@ out: * This turns it into a reparse point that redirects accesses to it, to the * corresponding resource in the WIM archive. * - * @name - * Path to extracted file (already created), NT namespace. + * @attr + * Object attributes that specify the path to the file. * @printable_name - * Printable representation of @name. + * Printable representation of the path encoded in @attr. * @lte * Unnamed data stream of the file. * @data_source_id @@ -1057,7 +1057,7 @@ out: * Returns 0 on success, or a positive error code on failure. */ int -wimboot_set_pointer(UNICODE_STRING *name, +wimboot_set_pointer(OBJECT_ATTRIBUTES *attr, const wchar_t *printable_name, const struct wim_lookup_table_entry *lte, u64 data_source_id, @@ -1067,16 +1067,11 @@ wimboot_set_pointer(UNICODE_STRING *name, int ret; HANDLE h = NULL; NTSTATUS status; - OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK iosb; DWORD bytes_returned; DWORD err; - memset(&attr, 0, sizeof(attr)); - attr.Length = sizeof(attr); - attr.ObjectName = name; - - status = (*func_NtOpenFile)(&h, GENERIC_WRITE | SYNCHRONIZE, &attr, + status = (*func_NtOpenFile)(&h, GENERIC_WRITE | SYNCHRONIZE, attr, &iosb, FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT | FILE_OPEN_REPARSE_POINT | diff --git a/src/win32_apply.c b/src/win32_apply.c index f249197a..5c861c2c 100644 --- a/src/win32_apply.c +++ b/src/win32_apply.c @@ -1358,7 +1358,7 @@ begin_extract_stream_instance(const struct wim_lookup_table_entry *stream, } else { FREE(dentry->_full_path); dentry->_full_path = NULL; - return wimboot_set_pointer(&ctx->pathbuf, + return wimboot_set_pointer(&ctx->attr, current_path(ctx), stream, ctx->wimboot.data_source_id,