+
+ if (res != INVALID_FILE_ATTRIBUTES)
+ return res;
+
+ error = GetLastError ();
+ if (error != ERROR_SHARING_VIOLATION)
+ return INVALID_FILE_ATTRIBUTES;
+
+ MONO_ENTER_GC_SAFE;
+ find_handle = FindFirstFile (name, &find_data);
+ MONO_EXIT_GC_SAFE;
+
+ if (find_handle == INVALID_HANDLE_VALUE)
+ return INVALID_FILE_ATTRIBUTES;
+
+ MONO_ENTER_GC_SAFE;
+ FindClose (find_handle);
+ MONO_EXIT_GC_SAFE;
+
+ return find_data.dwFileAttributes;
+}
+
+static gint64
+convert_filetime (const FILETIME *filetime)
+{
+ return (gint64) ((((guint64) filetime->dwHighDateTime) << 32) + filetime->dwLowDateTime);