Browse Source
Fix KnownFolder for x86 Windows (#17705)
* Fix KnownFolder for x86 Windows
* Remove try-finally
pull/17439/head
Stephen Monaco
1 year ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with
9 additions and
14 deletions
-
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); |
|
|
|
} |
|
|
|
|