Browse Source

Fix KnownFolder for x86 Windows (#17705)

* Fix KnownFolder for x86 Windows

* Remove try-finally
Stephen Monaco 10 months ago
parent
commit
860879abad
1 changed files with 9 additions and 14 deletions
  1. 9 14
      src/Avalonia.Base/Platform/Storage/FileIO/BclStorageProvider.cs

+ 9 - 14
src/Avalonia.Base/Platform/Storage/FileIO/BclStorageProvider.cs

@@ -150,29 +150,24 @@ internal abstract class BclStorageProvider : IStorageProvider
 
     private static unsafe string? TryGetWindowsKnownFolder(Guid guid)
     {
-        nint path = IntPtr.Zero;
+        char* path = null;
         string? result = null;
 
-        try
+        var hr = SHGetKnownFolderPath(&guid, 0, null, &path);
+        if (hr == 0)
         {
-            var hr = SHGetKnownFolderPath(guid, 0, 0, &path);
-            if (hr == 0)
-            {
-                result = Marshal.PtrToStringUni(path);
-            }
+            result = Marshal.PtrToStringUni((IntPtr)path);
         }
-        finally
+
+        if (path != null)
         {
-            if (path != IntPtr.Zero)
-            {
-                Marshal.FreeCoTaskMem(path);
-            }
+            Marshal.FreeCoTaskMem((IntPtr)path);
         }
 
         return result;
     }
 
     private static readonly Guid s_folderDownloads = new Guid("374DE290-123F-4565-9164-39C4925E467B");
-    [DllImport("shell32.dll")]
-    private static unsafe extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid id, int flags, nint token, nint* ppszPath);
+    [DllImport("shell32.dll", ExactSpelling = true)]
+    private static unsafe extern int SHGetKnownFolderPath(Guid* rfid, uint dwFlags, void* hToken, char** ppszPath);
 }