X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fwimboot.c;h=cdd74d9468f267dece137673db408ec30a838068;hb=4388ae46c8dc60c6bf4cd48d7dea640c1576522c;hp=35fe13a97e6fc12ff052b93d23fc4b73cb017659;hpb=ff3db5d2a3d2d0d7cd910ffe27489e0b98a97688;p=wimlib diff --git a/src/wimboot.c b/src/wimboot.c index 35fe13a9..cdd74d94 100644 --- a/src/wimboot.c +++ b/src/wimboot.c @@ -831,26 +831,6 @@ out: return ret; } -static int -win32_get_drive_path(const wchar_t *file_path, wchar_t drive_path[7]) -{ - tchar *file_abspath; - - file_abspath = realpath(file_path, NULL); - if (!file_abspath) - return WIMLIB_ERR_NOMEM; - - if (file_abspath[0] == L'\0' || file_abspath[1] != L':') { - ERROR("\"%ls\": Path format not recognized", file_abspath); - FREE(file_abspath); - return WIMLIB_ERR_UNSUPPORTED; - } - - wsprintf(drive_path, L"\\\\.\\%lc:", file_abspath[0]); - FREE(file_abspath); - return 0; -} - /* Try to attach an instance of the Windows Overlay File System Filter Driver to * the specified drive (such as C:) */ static bool @@ -1044,10 +1024,10 @@ out: * This turns it into a reparse point that redirects accesses to it, to the * corresponding resource in the WIM archive. * - * @attr - * Object attributes that specify the path to the file. + * @h + * Open handle to the file, with GENERIC_WRITE access. * @printable_name - * Printable representation of the path encoded in @attr. + * Printable representation of the path to the file. * @lte * Unnamed data stream of the file. * @data_source_id @@ -1061,30 +1041,16 @@ out: * Returns 0 on success, or a positive error code on failure. */ int -wimboot_set_pointer(OBJECT_ATTRIBUTES *attr, +wimboot_set_pointer(HANDLE h, const wchar_t *printable_name, const struct wim_lookup_table_entry *lte, u64 data_source_id, const u8 lookup_table_hash[SHA1_HASH_SIZE], bool wof_running) { - int ret; - HANDLE h = NULL; - NTSTATUS status; - IO_STATUS_BLOCK iosb; DWORD bytes_returned; DWORD err; - status = (*func_NtOpenFile)(&h, GENERIC_WRITE | SYNCHRONIZE, attr, - &iosb, FILE_SHARE_VALID_FLAGS, - FILE_OPEN_FOR_BACKUP_INTENT | - FILE_OPEN_REPARSE_POINT | - FILE_SYNCHRONOUS_IO_NONALERT); - if (!NT_SUCCESS(status)) { - SetLastError((*func_RtlNtStatusToDosError)(status)); - goto fail; - } - if (wof_running) { /* The WOF driver is running. We can create the reparse point * using FSCTL_SET_EXTERNAL_BACKING. */ @@ -1164,20 +1130,14 @@ wimboot_set_pointer(OBJECT_ATTRIBUTES *attr, goto fail; } - ret = 0; - goto out; + return 0; fail: err = GetLastError(); set_errno_from_win32_error(err); ERROR_WITH_ERRNO("\"%ls\": Couldn't set WIMBoot pointer data " "(err=%"PRIu32")", printable_name, (u32)err); - ret = WIMLIB_ERR_WIMBOOT; -out: - if (h) - (*func_NtClose)(h); - return ret; - + return WIMLIB_ERR_WIMBOOT; } #endif /* __WIN32__ */