A genuine shell library is a virtual item with no filesystem path. A
.library-ms file is an ordinary file whose XML can name any local directory.
filedialog::GetFolderResults was passing whatever IFileDialog::GetResult
returned to IShellLibrary::LoadLibraryFromItem and, on success, replacing it
with the library's embedded default save folder.
Gating the resolution on the item being affirmatively not a filesystem object
keeps real libraries selectable and resolving as before, while a .library-ms
file "resolves" to itself -- the .library-ms file, not its target.
In the modern era of user-customizable Quick Access sidebars on every file
dialog, navigating via `.lnk` files is considerably less useful than it
was twenty years ago.
Disable link-following in file-open dialogs by default, to prevent any of
the usual security issues involving symlink smuggling.
Allow overriding this behavior via a pref, for users who want to trade off
this security issue for convenience of being able to follow links inside
file dialogs (older OSes and established user workflows).
Note: File Save dialogs have a set of more nuanced guards against link
smuggling and protected file access; this change doesn't affect that.
- Remove numerous blocklist entries that no longer apply.
- Remove CanComputeVirtualKeyCodeFromScanCode(), because it's always true.
- Remove ShowXP{Folder,File}Picker(), since we have native pickers on supported Windows versions.
- Remove the config.trim_on_minimize preference, which is pointless on NT6+ and will just cause problems if used.
Tag #22.