[SHELL32] -CRegFolder: Implement CRegFolder::EnumObjects. Change its constructor to receive an extra parameter for the name of the key that should be enumerated. -CEnumIDListBase: Add a new method called AppendItemsFromEnumerator to facilitate merging the contents from one IEnumIDList to another. -Use the above in the enumerators of CControlPanelFolder, CDesktopFolder and CDrivesFolder to make them significantly simpler.
[SHELL32] - Simplify SHELL32_CoCreateInitSF by letting the callers fill the PERSIST_FOLDER_TARGET_INFO. This lets us stop using _ILSimpleGetTextW in it which breaks the logic that pidls should be read only by their shell folder. Also add an overload for SHELL32_CoCreateInitSF that makes it simpler to create a shell folder with a csidl. - Add a SHELL32_BindToSF helper to share some logic that was duplicated in several shell folders. - Move SHELL32_GetCustomFolderAttributeFromPath, SHELL32_GetCLSIDForDirectory and SHELL32_GetFSItemAttributes, SHELL32_BindToFS to CFSFolder.cpp as these were fs specific. - These changes give finer control to shell folders for how the bind will be done and shares more logic that can be shared.