-
-
- /* Open the file */
- h = win32_open_existing_file(path, GENERIC_WRITE);
- if (h == INVALID_HANDLE_VALUE) {
- set_errno_from_GetLastError();
- ret = WIMLIB_ERR_OPEN;
- goto out;
+ 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,
+ &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;