|
|
|
@ -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); |
|
|
|
} |
|
|
|
|