shell32: Install knownfolders to registry during DLL registration.

This commit is contained in:
Andrew Eikum 2015-03-17 10:03:23 -05:00 committed by Alexandre Julliard
parent efbea96142
commit 12d057c8e7
2 changed files with 322 additions and 146 deletions

View File

@ -812,6 +812,7 @@ static const WCHAR Local_Settings_Temporary_Internet_FilesW[] = {'L','o','c','a'
static const WCHAR Microsoft_Windows_GameExplorerW[] = {'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','G','a','m','e','E','x','p','l','o','r','e','r','\0'};
static const WCHAR Microsoft_Windows_LibrariesW[] = {'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','L','i','b','r','a','r','i','e','s','\0'};
static const WCHAR Microsoft_Windows_RingtonesW[] = {'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','R','i','n','g','t','o','n','e','s','\0'};
static const WCHAR Microsoft_Windows_Start_MenuW[] = {'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','S','t','a','r','t',' ','M','e','n','u',0};
static const WCHAR MusicW[] = {'M','u','s','i','c','\0'};
static const WCHAR Music_PlaylistsW[] = {'M','u','s','i','c','\\','P','l','a','y','l','i','s','t','s','\0'};
static const WCHAR Music_Sample_MusicW[] = {'M','u','s','i','c','\\','S','a','m','p','l','e',' ','M','u','s','i','c','\0'};
@ -827,9 +828,11 @@ static const WCHAR Pictures_Sample_PicturesW[] = {'P','i','c','t','u','r','e','s
static const WCHAR Pictures_Slide_ShowsW[] = {'P','i','c','t','u','r','e','s','\\','S','l','i','d','e',' ','S','h','o','w','s','\0'};
static const WCHAR PrintHoodW[] = {'P','r','i','n','t','H','o','o','d','\0'};
static const WCHAR Program_FilesW[] = {'P','r','o','g','r','a','m',' ','F','i','l','e','s','\0'};
static const WCHAR ProgramFilesW[] = {'P','r','o','g','r','a','m','F','i','l','e','s','\0'};
static const WCHAR Program_Files_Common_FilesW[] = {'P','r','o','g','r','a','m',' ','F','i','l','e','s','\\','C','o','m','m','o','n',' ','F','i','l','e','s','\0'};
static const WCHAR Program_Files_x86W[] = {'P','r','o','g','r','a','m',' ','F','i','l','e','s',' ','(','x','8','6',')','\0'};
static const WCHAR Program_Files_x86_Common_FilesW[] = {'P','r','o','g','r','a','m',' ','F','i','l','e','s',' ','(','x','8','6',')','\\','C','o','m','m','o','n',' ','F','i','l','e','s','\0'};
static const WCHAR ProgramFilesCommonW[] = {'P','r','o','g','r','a','m','F','i','l','e','s','C','o','m','m','o','n',0};
static const WCHAR ProgramFilesDirW[] = {'P','r','o','g','r','a','m','F','i','l','e','s','D','i','r','\0'};
static const WCHAR ProgramFilesDirX86W[] = {'P','r','o','g','r','a','m','F','i','l','e','s','D','i','r',' ','(','x','8','6',')','\0'};
static const WCHAR ProgramsW[] = {'P','r','o','g','r','a','m','s','\0'};
@ -843,11 +846,13 @@ static const WCHAR Start_MenuW[] = {'S','t','a','r','t',' ','M','e','n','u','\0'
static const WCHAR Start_Menu_ProgramsW[] = {'S','t','a','r','t',' ','M','e','n','u','\\','P','r','o','g','r','a','m','s','\0'};
static const WCHAR Start_Menu_Admin_ToolsW[] = {'S','t','a','r','t',' ','M','e','n','u','\\','P','r','o','g','r','a','m','s','\\','A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'};
static const WCHAR Start_Menu_StartupW[] = {'S','t','a','r','t',' ','M','e','n','u','\\','P','r','o','g','r','a','m','s','\\','S','t','a','r','t','U','p','\0'};
static const WCHAR SystemW[] = {'S','y','s','t','e','m',0};
static const WCHAR TemplatesW[] = {'T','e','m','p','l','a','t','e','s','\0'};
static const WCHAR UsersW[] = {'U','s','e','r','s','\0'};
static const WCHAR UsersPublicW[] = {'U','s','e','r','s','\\','P','u','b','l','i','c','\0'};
static const WCHAR VideosW[] = {'V','i','d','e','o','s','\0'};
static const WCHAR Videos_Sample_VideosW[] = {'V','i','d','e','o','s','\\','S','a','m','p','l','e',' ','V','i','d','e','o','s','\0'};
static const WCHAR WindowsW[] = {'W','i','n','d','o','w','s',0};
static const WCHAR DefaultW[] = {'.','D','e','f','a','u','l','t','\0'};
static const WCHAR AllUsersProfileW[] = {'%','A','L','L','U','S','E','R','S','P','R','O','F','I','L','E','%','\0'};
static const WCHAR UserProfileW[] = {'%','U','S','E','R','P','R','O','F','I','L','E','%','\0'};
@ -886,6 +891,21 @@ typedef struct
CSIDL_Type type;
LPCWSTR szValueName;
LPCWSTR szDefaultPath; /* fallback string or resource ID */
/* KNOWNFOLDER_DEFINITION fields */
KF_CATEGORY category;
const WCHAR *pszName;
const WCHAR *pszDescription;
const KNOWNFOLDERID *fidParent;
const WCHAR *pszRelativePath;
const WCHAR *pszParsingName;
const WCHAR *pszTooltip;
const WCHAR *pszLocalizedName;
const WCHAR *pszIcon;
const WCHAR *pszSecurity;
DWORD dwAttributes;
KF_DEFINITION_FLAGS kfdFlags;
const FOLDERTYPEID *ftidType;
} CSIDL_DATA;
static const CSIDL_DATA CSIDL_Data[] =
@ -894,7 +914,21 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_Desktop,
CSIDL_Type_User,
DesktopW,
MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY)
MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY),
KF_CATEGORY_PERUSER, /* category */
DesktopW, /* name */
NULL, /* description */
&GUID_NULL, /* parent */
DesktopW, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
FILE_ATTRIBUTE_READONLY, /* attributes */
0, /* flags */
&GUID_NULL /* typeid */
},
{ /* 0x01 - CSIDL_INTERNET */
&FOLDERID_InternetFolder,
@ -1014,7 +1048,21 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_Fonts,
CSIDL_Type_WindowsPath,
FontsW,
FontsW
FontsW,
KF_CATEGORY_FIXED, /* category */
FontsW, /* name */
NULL, /* description */
&GUID_NULL, /* parent */
NULL, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
0, /* attributes */
0, /* flags */
&FOLDERID_Windows/* typeid */
},
{ /* 0x15 - CSIDL_TEMPLATES */
&FOLDERID_Templates,
@ -1026,13 +1074,41 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_CommonStartMenu,
CSIDL_Type_AllUsers,
Common_Start_MenuW,
Start_MenuW
Start_MenuW,
KF_CATEGORY_COMMON, /* category */
Common_Start_MenuW, /* name */
NULL, /* description */
&FOLDERID_ProgramData, /* parent */
Microsoft_Windows_Start_MenuW, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
FILE_ATTRIBUTE_READONLY, /* attributes */
0, /* flags */
&GUID_NULL /* typeid */
},
{ /* 0x17 - CSIDL_COMMON_PROGRAMS */
&FOLDERID_CommonPrograms,
CSIDL_Type_AllUsers,
Common_ProgramsW,
Start_Menu_ProgramsW
Start_Menu_ProgramsW,
KF_CATEGORY_COMMON, /* category */
Common_ProgramsW, /* name */
NULL, /* description */
&FOLDERID_CommonStartMenu, /* parent */
ProgramsW, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
FILE_ATTRIBUTE_READONLY, /* attributes */
0, /* flags */
&GUID_NULL /* typeid */
},
{ /* 0x18 - CSIDL_COMMON_STARTUP */
&FOLDERID_CommonStartup,
@ -1104,25 +1180,81 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_ProgramData,
CSIDL_Type_AllUsers,
Common_AppDataW,
Application_DataW
Application_DataW,
KF_CATEGORY_FIXED, /* category */
Common_AppDataW, /* name */
NULL, /* description */
&GUID_NULL, /* parent */
NULL, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
0, /* attributes */
0, /* flags */
&GUID_NULL /* typeid */
},
{ /* 0x24 - CSIDL_WINDOWS */
&FOLDERID_Windows,
CSIDL_Type_WindowsPath,
NULL,
NULL
NULL,
KF_CATEGORY_FIXED, /* category */
WindowsW, /* name */
NULL, /* description */
&GUID_NULL, /* parent */
NULL, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
0, /* attributes */
0, /* flags */
&GUID_NULL /* typeid */
},
{ /* 0x25 - CSIDL_SYSTEM */
&FOLDERID_System,
CSIDL_Type_SystemPath,
NULL,
NULL
NULL,
KF_CATEGORY_FIXED, /* category */
SystemW, /* name */
NULL, /* description */
&GUID_NULL, /* parent */
NULL, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
0, /* attributes */
0, /* flags */
&GUID_NULL /* typeid */
},
{ /* 0x26 - CSIDL_PROGRAM_FILES */
&FOLDERID_ProgramFiles,
CSIDL_Type_CurrVer,
ProgramFilesDirW,
Program_FilesW
Program_FilesW,
KF_CATEGORY_FIXED, /* category */
ProgramFilesW, /* name */
NULL, /* description */
&GUID_NULL, /* parent */
NULL, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
FILE_ATTRIBUTE_READONLY, /* attributes */
0, /* flags */
&GUID_NULL /* typeid */
},
{ /* 0x27 - CSIDL_MYPICTURES */
&FOLDERID_Pictures,
@ -1152,7 +1284,21 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_ProgramFilesCommon,
CSIDL_Type_CurrVer,
CommonFilesDirW,
Program_Files_Common_FilesW
Program_Files_Common_FilesW,
KF_CATEGORY_FIXED, /* category */
ProgramFilesCommonW, /* name */
NULL, /* description */
&GUID_NULL, /* parent */
NULL, /* relative path */
NULL, /* parsing */
NULL, /* tooltip */
NULL, /* localized */
NULL, /* icon */
NULL, /* security */
0, /* attributes */
0, /* flags */
&GUID_NULL /* typeid */
},
{ /* 0x2c - CSIDL_PROGRAM_FILES_COMMONX86 */
&FOLDERID_ProgramFilesCommonX86,
@ -2879,32 +3025,6 @@ static HRESULT set_folder_attributes(void)
return S_OK;
}
/* Register the default values in the registry, as some apps seem to depend
* on their presence. The set registered was taken from Windows XP.
*/
HRESULT SHELL_RegisterShellFolders(void)
{
HRESULT hr;
/* Set up '$HOME' targeted symlinks for 'My Documents', 'My Pictures',
* 'My Videos', 'My Music' and 'Desktop' in advance, so that the
* _SHRegister*ShellFolders() functions will find everything nice and clean
* and thus will not attempt to create them in the profile directory. */
_SHCreateSymbolicLinks();
hr = _SHRegisterUserShellFolders(TRUE);
if (SUCCEEDED(hr))
hr = _SHRegisterUserShellFolders(FALSE);
if (SUCCEEDED(hr))
hr = _SHRegisterCommonShellFolders();
if (SUCCEEDED(hr))
hr = create_extra_folders();
if (SUCCEEDED(hr))
hr = set_folder_attributes();
return hr;
}
/*************************************************************************
* SHGetSpecialFolderPathA [SHELL32.@]
*/
@ -3912,16 +4032,12 @@ static HRESULT WINAPI foldermanager_GetFolderByName(
return E_NOTIMPL;
}
static HRESULT WINAPI foldermanager_RegisterFolder(
IKnownFolderManager *iface,
REFKNOWNFOLDERID rfid,
KNOWNFOLDER_DEFINITION const *pKFD)
static HRESULT register_folder(const KNOWNFOLDERID *rfid, const KNOWNFOLDER_DEFINITION *pKFD)
{
HRESULT hr;
HKEY hKey = NULL;
DWORD dwDisp;
LPWSTR registryPath = NULL;
TRACE("(%p, %s, %p)\n", iface, debugstr_guid(rfid), pKFD);
hr = get_known_folder_registry_path(rfid, NULL, &registryPath);
TRACE("registry path: %s\n", debugstr_w(registryPath));
@ -3965,6 +4081,15 @@ static HRESULT WINAPI foldermanager_RegisterFolder(
return hr;
}
static HRESULT WINAPI foldermanager_RegisterFolder(
IKnownFolderManager *iface,
REFKNOWNFOLDERID rfid,
KNOWNFOLDER_DEFINITION const *pKFD)
{
TRACE("(%p, %s, %p)\n", iface, debugstr_guid(rfid), pKFD);
return register_folder(rfid, pKFD);
}
static HRESULT WINAPI foldermanager_UnregisterFolder(
IKnownFolderManager *iface,
REFKNOWNFOLDERID rfid)
@ -4085,3 +4210,56 @@ HRESULT WINAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE
FIXME("%s, 0x%08x, %p, %p\n", debugstr_guid(rfid), flags, token, pidl);
return E_NOTIMPL;
}
static void register_system_knownfolders(void)
{
int i;
for(i = 0; i < sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0]); ++i){
const CSIDL_DATA *folder = &CSIDL_Data[i];
if(folder->pszName){
KNOWNFOLDER_DEFINITION kfd;
/* register_folder won't modify kfd, so cast away const instead of
* reallocating */
kfd.category = folder->category;
kfd.pszName = (WCHAR*)folder->pszName;
kfd.pszDescription = (WCHAR*)folder->pszDescription;
memcpy(&kfd.fidParent, folder->fidParent, sizeof(KNOWNFOLDERID));
kfd.pszRelativePath = (WCHAR*)folder->pszRelativePath;
kfd.pszParsingName = (WCHAR*)folder->pszParsingName;
kfd.pszTooltip = (WCHAR*)folder->pszTooltip;
kfd.pszLocalizedName = (WCHAR*)folder->pszLocalizedName;
kfd.pszIcon = (WCHAR*)folder->pszIcon;
kfd.pszSecurity = (WCHAR*)folder->pszSecurity;
kfd.dwAttributes = folder->dwAttributes;
kfd.kfdFlags = folder->kfdFlags;
memcpy(&kfd.ftidType, folder->ftidType, sizeof(FOLDERTYPEID));
register_folder(folder->id, &kfd);
}
}
}
HRESULT SHELL_RegisterShellFolders(void)
{
HRESULT hr;
/* Set up '$HOME' targeted symlinks for 'My Documents', 'My Pictures',
* 'My Videos', 'My Music' and 'Desktop' in advance, so that the
* _SHRegister*ShellFolders() functions will find everything nice and clean
* and thus will not attempt to create them in the profile directory. */
_SHCreateSymbolicLinks();
hr = _SHRegisterUserShellFolders(TRUE);
if (SUCCEEDED(hr))
hr = _SHRegisterUserShellFolders(FALSE);
if (SUCCEEDED(hr))
hr = _SHRegisterCommonShellFolders();
if (SUCCEEDED(hr))
hr = create_extra_folders();
if (SUCCEEDED(hr))
hr = set_folder_attributes();
if (SUCCEEDED(hr))
register_system_knownfolders();
return hr;
}

View File

@ -888,6 +888,7 @@ if (0) { /* crashes */
/* Standard CSIDL values (and their flags) uses only two less-significant bytes */
#define NO_CSIDL 0x10000
#define WINE_ATTRIBUTES_OPTIONAL 0x20000
#define KFD_TODO_WINE 0x40000
#define KNOWN_FOLDER(id, csidl, name, category, parent1, parent2, relative_path, parsing_name, attributes, definitionFlags) \
{ &id, # id, csidl, # csidl, name, category, {&parent1, &parent2}, relative_path, parsing_name, attributes, definitionFlags, __LINE__ }
@ -923,7 +924,7 @@ struct knownFolderDef {
*/
static const struct knownFolderDef known_folders[] = {
KNOWN_FOLDER(FOLDERID_AddNewPrograms,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"AddNewProgramsFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -933,7 +934,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_AdminTools,
CSIDL_ADMINTOOLS,
CSIDL_ADMINTOOLS|KFD_TODO_WINE,
"Administrative Tools",
KF_CATEGORY_PERUSER,
FOLDERID_Programs, GUID_NULL,
@ -942,7 +943,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_AppUpdates,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"AppUpdatesFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -952,7 +953,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_CDBurning,
CSIDL_CDBURN_AREA,
CSIDL_CDBURN_AREA|KFD_TODO_WINE,
"CD Burning",
KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL,
@ -961,7 +962,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_ChangeRemovePrograms,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"ChangeRemoveProgramsFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -971,7 +972,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_CommonAdminTools,
CSIDL_COMMON_ADMINTOOLS,
CSIDL_COMMON_ADMINTOOLS|KFD_TODO_WINE,
"Common Administrative Tools",
KF_CATEGORY_COMMON,
FOLDERID_CommonPrograms, GUID_NULL,
@ -980,7 +981,8 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_CommonOEMLinks,
CSIDL_COMMON_OEM_LINKS,"OEM Links",
CSIDL_COMMON_OEM_LINKS|KFD_TODO_WINE,
"OEM Links",
KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL,
"OEM Links",
@ -1006,7 +1008,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_CommonStartup,
CSIDL_COMMON_STARTUP,
CSIDL_COMMON_STARTUP|KFD_TODO_WINE,
"Common Startup",
KF_CATEGORY_COMMON,
FOLDERID_CommonPrograms, GUID_NULL,
@ -1015,7 +1017,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_CommonTemplates,
CSIDL_COMMON_TEMPLATES,
CSIDL_COMMON_TEMPLATES|KFD_TODO_WINE,
"Common Templates",
KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL,
@ -1024,7 +1026,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ComputerFolder,
CSIDL_DRIVES,
CSIDL_DRIVES|KFD_TODO_WINE,
"MyComputerFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1033,7 +1035,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ConflictFolder,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"ConflictFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1043,7 +1045,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ConnectionsFolder,
CSIDL_CONNECTIONS,
CSIDL_CONNECTIONS|KFD_TODO_WINE,
"ConnectionsFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1053,7 +1055,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Contacts,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Contacts",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1062,7 +1064,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_ControlPanelFolder,
CSIDL_CONTROLS,
CSIDL_CONTROLS|KFD_TODO_WINE,
"ControlPanelFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1072,7 +1074,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Cookies,
CSIDL_COOKIES,
CSIDL_COOKIES|KFD_TODO_WINE,
"Cookies",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, FOLDERID_LocalAppData,
@ -1090,7 +1092,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_DeviceMetadataStore,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Device Metadata Store",
KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL,
@ -1099,7 +1101,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Documents,
CSIDL_MYDOCUMENTS,
CSIDL_MYDOCUMENTS|KFD_TODO_WINE,
"Personal",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1108,7 +1110,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_DocumentsLibrary,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"DocumentsLibrary",
KF_CATEGORY_PERUSER,
FOLDERID_Libraries, GUID_NULL,
@ -1117,7 +1119,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_PRECREATE | KFDF_STREAM),
KNOWN_FOLDER(FOLDERID_Downloads,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Downloads",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1126,7 +1128,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_Favorites,
CSIDL_FAVORITES,
CSIDL_FAVORITES|KFD_TODO_WINE,
"Favorites",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1144,7 +1146,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Games,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Games",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1153,7 +1155,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_GameTasks,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"GameTasks",
KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL,
@ -1162,7 +1164,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_History,
CSIDL_HISTORY,
CSIDL_HISTORY|KFD_TODO_WINE,
"History",
KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL,
@ -1171,7 +1173,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_HomeGroup,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"HomeGroupFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1180,7 +1182,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ImplicitAppShortcuts,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"ImplicitAppShortcuts",
KF_CATEGORY_PERUSER,
FOLDERID_UserPinned, GUID_NULL,
@ -1189,7 +1191,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_InternetCache,
CSIDL_INTERNET_CACHE,
CSIDL_INTERNET_CACHE|KFD_TODO_WINE,
"Cache",
KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL,
@ -1198,7 +1200,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_InternetFolder,
CSIDL_INTERNET,
CSIDL_INTERNET|KFD_TODO_WINE,
"InternetFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1207,7 +1209,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Libraries,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Libraries",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL,
@ -1216,7 +1218,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_Links,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Links",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1225,7 +1227,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_LocalAppData,
CSIDL_LOCAL_APPDATA,
CSIDL_LOCAL_APPDATA|KFD_TODO_WINE,
"Local AppData",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1234,7 +1236,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_LOCAL_REDIRECT_ONLY | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_LocalAppDataLow,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"LocalAppDataLow",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1243,7 +1245,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,
KFDF_LOCAL_REDIRECT_ONLY | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_LocalizedResourcesDir,
CSIDL_RESOURCES_LOCALIZED,
CSIDL_RESOURCES_LOCALIZED|KFD_TODO_WINE,
"LocalizedResourcesDir",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1252,7 +1254,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Music,
CSIDL_MYMUSIC,
CSIDL_MYMUSIC|KFD_TODO_WINE,
"My Music",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1261,7 +1263,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_MusicLibrary,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"MusicLibrary",
KF_CATEGORY_PERUSER,
FOLDERID_Libraries, GUID_NULL,
@ -1270,7 +1272,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_PRECREATE | KFDF_STREAM),
KNOWN_FOLDER(FOLDERID_NetHood,
CSIDL_NETHOOD,
CSIDL_NETHOOD|KFD_TODO_WINE,
"NetHood",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL,
@ -1279,7 +1281,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_NetworkFolder,
CSIDL_NETWORK,
CSIDL_NETWORK|KFD_TODO_WINE,
"NetworkPlacesFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1288,7 +1290,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_OriginalImages,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Original Images",
KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL,
@ -1297,7 +1299,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_PhotoAlbums,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"PhotoAlbums",
KF_CATEGORY_PERUSER,
FOLDERID_Pictures, GUID_NULL,
@ -1306,7 +1308,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
0),
KNOWN_FOLDER(FOLDERID_Pictures,
CSIDL_MYPICTURES,
CSIDL_MYPICTURES|KFD_TODO_WINE,
"My Pictures",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1315,7 +1317,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PicturesLibrary,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"PicturesLibrary",
KF_CATEGORY_PERUSER,
FOLDERID_Libraries, GUID_NULL,
@ -1324,7 +1326,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_PRECREATE | KFDF_STREAM),
KNOWN_FOLDER(FOLDERID_Playlists,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Playlists",
KF_CATEGORY_PERUSER,
FOLDERID_Music, GUID_NULL,
@ -1333,7 +1335,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
0),
KNOWN_FOLDER(FOLDERID_PrintersFolder,
CSIDL_PRINTERS,
CSIDL_PRINTERS|KFD_TODO_WINE,
"PrintersFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1342,7 +1344,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_PrintHood,
CSIDL_PRINTHOOD,
CSIDL_PRINTHOOD|KFD_TODO_WINE,
"PrintHood",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL,
@ -1351,7 +1353,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Profile,
CSIDL_PROFILE,
CSIDL_PROFILE|KFD_TODO_WINE,
"Profile",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1388,7 +1390,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX64,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"ProgramFilesCommonX64",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1397,7 +1399,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX86,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"ProgramFilesCommonX86",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1406,7 +1408,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ProgramFilesX64,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"ProgramFilesX64",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1415,7 +1417,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ProgramFilesX86,
CSIDL_PROGRAM_FILESX86,
CSIDL_PROGRAM_FILESX86|KFD_TODO_WINE,
"ProgramFilesX86",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1424,7 +1426,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_Programs,
CSIDL_PROGRAMS,
CSIDL_PROGRAMS|KFD_TODO_WINE,
"Programs",
KF_CATEGORY_PERUSER,
FOLDERID_StartMenu, GUID_NULL,
@ -1433,7 +1435,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_Public,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Public",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1443,7 +1445,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicDesktop,
CSIDL_COMMON_DESKTOPDIRECTORY,
CSIDL_COMMON_DESKTOPDIRECTORY|KFD_TODO_WINE,
"Common Desktop",
KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL,
@ -1452,7 +1454,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicDocuments,
CSIDL_COMMON_DOCUMENTS,
CSIDL_COMMON_DOCUMENTS|KFD_TODO_WINE,
"Common Documents",
KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL,
@ -1461,7 +1463,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicDownloads,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"CommonDownloads",
KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL,
@ -1470,7 +1472,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicGameTasks,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"PublicGameTasks",
KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL,
@ -1479,7 +1481,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_PublicLibraries,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"PublicLibraries",
KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL,
@ -1488,7 +1490,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicMusic,
CSIDL_COMMON_MUSIC,
CSIDL_COMMON_MUSIC|KFD_TODO_WINE,
"CommonMusic",
KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL,
@ -1497,7 +1499,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicPictures,
CSIDL_COMMON_PICTURES,
CSIDL_COMMON_PICTURES|KFD_TODO_WINE,
"CommonPictures",
KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL,
@ -1506,7 +1508,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicRingtones,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"CommonRingtones",
KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL,
@ -1515,7 +1517,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicVideos,
CSIDL_COMMON_VIDEO,
CSIDL_COMMON_VIDEO|KFD_TODO_WINE,
"CommonVideo",
KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL,
@ -1524,7 +1526,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_QuickLaunch,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Quick Launch",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL,
@ -1533,7 +1535,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Recent,
CSIDL_RECENT,
CSIDL_RECENT|KFD_TODO_WINE,
"Recent",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL,
@ -1542,7 +1544,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_RecordedTVLibrary,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"RecordedTVLibrary",
KF_CATEGORY_COMMON,
FOLDERID_PublicLibraries, GUID_NULL,
@ -1551,7 +1553,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_PRECREATE | KFDF_STREAM),
KNOWN_FOLDER(FOLDERID_RecycleBinFolder,
CSIDL_BITBUCKET,
CSIDL_BITBUCKET|KFD_TODO_WINE,
"RecycleBinFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1560,7 +1562,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_ResourceDir,
CSIDL_RESOURCES,
CSIDL_RESOURCES|KFD_TODO_WINE,
"ResourceDir",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1569,7 +1571,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Ringtones,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Ringtones",
KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL,
@ -1578,7 +1580,7 @@ static const struct knownFolderDef known_folders[] = {
0,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_RoamingAppData,
CSIDL_APPDATA,
CSIDL_APPDATA|KFD_TODO_WINE,
"AppData",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1587,7 +1589,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SampleMusic,
NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
"SampleMusic",
KF_CATEGORY_COMMON,
FOLDERID_PublicMusic, GUID_NULL,
@ -1596,7 +1598,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_SamplePictures,
NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
"SamplePictures",
KF_CATEGORY_COMMON,
FOLDERID_PublicPictures, GUID_NULL,
@ -1605,7 +1607,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_SamplePlaylists,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"SamplePlaylists",
KF_CATEGORY_COMMON,
FOLDERID_PublicMusic, GUID_NULL,
@ -1614,7 +1616,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
0),
KNOWN_FOLDER(FOLDERID_SampleVideos,
NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
"SampleVideos",
KF_CATEGORY_COMMON,
FOLDERID_PublicVideos, GUID_NULL,
@ -1623,7 +1625,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_SavedGames,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"SavedGames",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1632,7 +1634,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_SavedSearches,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Searches",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1641,7 +1643,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_SEARCH_CSC,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"CSCFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1650,7 +1652,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SearchHome,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"SearchHomeFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1659,7 +1661,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SEARCH_MAPI,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"MAPIFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1668,7 +1670,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SendTo,
CSIDL_SENDTO,
CSIDL_SENDTO|KFD_TODO_WINE,
"SendTo",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL,
@ -1677,7 +1679,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SidebarDefaultParts,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Default Gadgets",
KF_CATEGORY_COMMON,
FOLDERID_ProgramFiles, GUID_NULL,
@ -1686,7 +1688,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SidebarParts,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"Gadgets",
KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL,
@ -1695,7 +1697,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_StartMenu,
CSIDL_STARTMENU,
CSIDL_STARTMENU|KFD_TODO_WINE,
"Start Menu",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL,
@ -1704,7 +1706,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_Startup,
CSIDL_STARTUP,
CSIDL_STARTUP|KFD_TODO_WINE,
"Startup",
KF_CATEGORY_PERUSER,
FOLDERID_Programs, GUID_NULL,
@ -1713,7 +1715,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_SyncManagerFolder,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"SyncCenterFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1723,7 +1725,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SyncResultsFolder,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"SyncResultsFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1733,7 +1735,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SyncSetupFolder,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"SyncSetupFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1752,7 +1754,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_SystemX86,
CSIDL_SYSTEMX86,
CSIDL_SYSTEMX86|KFD_TODO_WINE,
"SystemX86",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1761,7 +1763,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Templates,
CSIDL_TEMPLATES,
CSIDL_TEMPLATES|KFD_TODO_WINE,
"Templates",
KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL,
@ -1770,7 +1772,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_UserPinned,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"User Pinned",
KF_CATEGORY_PERUSER,
FOLDERID_QuickLaunch, GUID_NULL,
@ -1779,7 +1781,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_HIDDEN,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_UserProfiles,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"UserProfiles",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1788,7 +1790,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_UserProgramFiles,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"UserProgramFiles",
KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL,
@ -1797,7 +1799,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_UserProgramFilesCommon,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"UserProgramFilesCommon",
KF_CATEGORY_PERUSER,
FOLDERID_UserProgramFiles, GUID_NULL,
@ -1806,7 +1808,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_UsersFiles,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"UsersFilesFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1815,7 +1817,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_UsersLibraries,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"UsersLibrariesFolder",
KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL,
@ -1824,7 +1826,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(FOLDERID_Videos,
CSIDL_MYVIDEO,
CSIDL_MYVIDEO|KFD_TODO_WINE,
"My Video",
KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL,
@ -1833,7 +1835,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_VideosLibrary,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"VideosLibrary",
KF_CATEGORY_PERUSER,
FOLDERID_Libraries, GUID_NULL,
@ -1851,7 +1853,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(_FOLDERID_CredentialManager,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"CredentialManager",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1860,7 +1862,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(_FOLDERID_CryptoKeys,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"CryptoKeys",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1869,7 +1871,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(_FOLDERID_DpapiKeys,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"DpapiKeys",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1878,7 +1880,7 @@ static const struct knownFolderDef known_folders[] = {
0,
0),
KNOWN_FOLDER(_FOLDERID_SystemCertificates,
NO_CSIDL,
NO_CSIDL|KFD_TODO_WINE,
"SystemCertificates",
KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL,
@ -1955,14 +1957,16 @@ static void check_known_folder(IKnownFolderManager *mgr, KNOWNFOLDERID *folderId
if(SUCCEEDED(hr))
{
hr = IKnownFolder_GetFolderDefinition(folder, &kfd);
todo_wine
ok_(__FILE__, known_folder->line)(hr == S_OK, "cannot get known folder definition for %s\n", known_folder->sFolderId);
if(known_folder->csidl & KFD_TODO_WINE)
todo_wine
ok_(__FILE__, known_folder->line)(hr == S_OK, "cannot get known folder definition for %s\n", known_folder->sFolderId);
else
ok_(__FILE__, known_folder->line)(hr == S_OK, "cannot get known folder definition for %s\n", known_folder->sFolderId);
if(SUCCEEDED(hr))
{
ret = MultiByteToWideChar(CP_ACP, 0, known_folder->sName, -1, sName, sizeof(sName)/sizeof(sName[0]));
ok_(__FILE__, known_folder->line)(ret != 0, "cannot convert known folder name \"%s\" to wide characters\n", known_folder->sName);
todo_wine
ok_(__FILE__, known_folder->line)(lstrcmpW(kfd.pszName, sName)==0, "invalid known folder name returned for %s: %s expected, but %s retrieved\n", known_folder->sFolderId, wine_dbgstr_w(sName), wine_dbgstr_w(kfd.pszName));
ok_(__FILE__, known_folder->line)(kfd.category == known_folder->category, "invalid known folder category for %s: %d expected, but %d retrieved\n", known_folder->sFolderId, known_folder->category, kfd.category);
@ -2091,9 +2095,7 @@ static void test_knownFolders(void)
if(SUCCEEDED(hr))
{
hr = IKnownFolder_GetCategory(folder, &cat);
todo_wine
ok(hr == S_OK, "failed to get folder category: 0x%08x\n", hr);
todo_wine
ok(cat==KF_CATEGORY_FIXED, "invalid folder category: %d\n", cat);
hr = IKnownFolder_GetId(folder, &folderId);
@ -2116,15 +2118,11 @@ static void test_knownFolders(void)
ok(hr == E_INVALIDARG, "unexpected value from SetPath: 0x%08x\n", hr);
hr = IKnownFolder_GetFolderDefinition(folder, &kfDefinition);
todo_wine
ok(hr == S_OK, "failed to get folder definition: 0x%08x\n", hr);
if(SUCCEEDED(hr))
{
todo_wine
ok(kfDefinition.category==KF_CATEGORY_FIXED, "invalid folder category: 0x%08x\n", kfDefinition.category);
todo_wine
ok(lstrcmpW(kfDefinition.pszName, sWindows)==0, "invalid folder name: %s\n", wine_dbgstr_w(kfDefinition.pszName));
todo_wine
ok(kfDefinition.dwAttributes==0, "invalid folder attributes: %d\n", kfDefinition.dwAttributes);
FreeKnownFolderDefinitionFields(&kfDefinition);
}