Restore handle leak, it seamed to cause other errors?!
diff --git a/lib/zip_source_file_win32_utf16.c b/lib/zip_source_file_win32_utf16.c
index a225d1c..8263ac9 100644
--- a/lib/zip_source_file_win32_utf16.c
+++ b/lib/zip_source_file_win32_utf16.c
@@ -94,7 +94,7 @@
     
     return CreateFile2((const wchar_t *)name, access, share_mode, creation_disposition, &extParams);
 #else
-    // wprintf(L"CreateFileW(\"%s\", %d, %d, %d, %p, %d)\n", (const wchar_t *)name, (int)access, (int)share_mode, (int)creation_disposition, security_attributes, (int)file_attributes);
+    wprintf(L"CreateFileW(\"%s\", %x, %x, %x, %p, %x)\n", (const wchar_t *)name, access, share_mode, creation_disposition, security_attributes, file_attributes);
     return CreateFileW((const wchar_t *)name, access, share_mode, security_attributes, creation_disposition, file_attributes, template_file);
 #endif
 }
diff --git a/lib/zip_source_file_win32_write.c b/lib/zip_source_file_win32_write.c
index c19ec92..dfcf1ad 100644
--- a/lib/zip_source_file_win32_write.c
+++ b/lib/zip_source_file_win32_write.c
@@ -203,7 +203,7 @@
 
     ok = _zip_stat_win32(ctx, st, h);
     
-    CloseHandle(h);
+    // CloseHandle(h);
     
     return ok;
 }
@@ -228,10 +228,10 @@
     DWORD file_attributes = FILE_ATTRIBUTE_NORMAL;
     
     if (temporary) {
-        access |= GENERIC_WRITE;
+        access = GENERIC_READ | GENERIC_WRITE;
         share_mode = FILE_SHARE_READ;
         creation_disposition = CREATE_NEW;
-        file_attributes |= FILE_ATTRIBUTE_TEMPORARY;
+        file_attributes = FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_TEMPORARY;
     }
 
     HANDLE h = write_ops->create_file(name, access, share_mode, security_attributes, creation_disposition, file_attributes, NULL);