29#define WIN32_NO_STATUS
34#define _WIN32_WINNT _WIN32_WINNT_WS03
46#include <wine/unicode.h>
74#define WINE_MOUNTMGR_EXTENSIONS
99 szRoot[0] = (
WCHAR)(
L'A' + iDrive);
108PathSearchOnExtensionsW(
123#if (_WIN32_WINNT >= _WIN32_WINNT_WS03)
148 INT iDrive, cchPathLeft;
150 PWCHAR pchTemp = szTemp, pchPath;
190 if (szTemp[0] ==
L'\\')
204 if (*pchTemp ==
L'\\')
214#define VALID_SHORT_PATH_CHAR_CLASSES ( \
215 PATH_CHAR_CLASS_DOT | \
216 PATH_CHAR_CLASS_BACKSLASH | \
217 PATH_CHAR_CLASS_COLON | \
218 PATH_CHAR_CLASS_OTHER_VALID \
228 cchPathLeft -=
lstrlenW(pszPath) + 1;
236 cchPathLeft -= (2 + 1);
243 pchSlash =
StrChrW(pchSlash + 1,
L'\\');
248 pchTemp += pchSlash - pszPath;
249 cchPathLeft -= (
INT)(
SIZE_T)(pchSlash - pszPath) + 1;
263 while (*pchTemp && cchPathLeft > 0)
266 if (*pchTemp ==
L'.')
275 else if (pchTemp[1] ==
L'.' && (pchTemp[2] ==
UNICODE_NULL || pchTemp[2] ==
L'\\'))
285 while (*pchTemp && *pchTemp !=
L'\\')
290 while (*pchTemp ==
L'\\')
306 pchPath = &pszPath[
lstrlenW(pszPath)];
315 WCHAR szDotExtension[1 + 3 + 1] =
L"";
316 INT cchDotExtension = 0;
319 while (*pchTemp && *pchTemp !=
L'\\')
321 if (*pchTemp ==
L'.')
327 ZeroMemory(szDotExtension,
sizeof(szDotExtension));
332 if (cchDotExtension < 1 + 3)
333 szDotExtension[cchDotExtension++] = *pchTemp;
338 szTitle[cchTitle++] = *pchTemp;
345 for (ich = 0;
szTitle[ich] && cchPathLeft > 0; ++ich)
354 for (ich = 0; szDotExtension[ich] && cchPathLeft > 0; ++ich)
356 *pchPath++ = szDotExtension[ich];
364 while (*pchTemp !=
UNICODE_NULL && *pchTemp !=
L'\\' && cchPathLeft > 0)
366 *pchPath++ = *pchTemp++;
372 while (*pchTemp ==
L'\\')
387 if (*pchPath ==
L'.')
401 else if ((
INT) hToken == -1)
409 TRACE(
"SHELL_GetUserProfileDirectoryW returning %S\n",
szPath);
497 TRACE(
"(%s)\n",lpszPath);
500 return (
LPSTR)(*lpszPath?(lpszPath+1):lpszPath);
511 return (
LPWSTR)(*lpszPath?(lpszPath+1):lpszPath);
609 TRACE(
"%s\n", pszPath);
725 static const char *
const lpszExtensions[] =
726 {
"exe",
"com",
"pif",
"cmd",
"bat",
"scf",
"scr",
NULL };
728 TRACE(
"path=%s\n",lpszPath);
730 for(
i=0; lpszExtensions[
i];
i++)
747 static const WCHAR lpszExtensions[][4] =
748 {
L"exe",
L"com",
L"pif",
L"cmd",
L"bat",
L"scf",
L"scr",
L"" };
752 for(
i=0; lpszExtensions[
i][0];
i++)
753 if (!
wcsicmp(lpszExtension,lpszExtensions[
i]))
return TRUE;
828 DWORD cchMaxFileName, iDrive;
850 iDrive = ((lpszPath[0] -
L'A') & 0x1F);
853 if (!IsRemovableDrive(iDrive))
859#define MSDOS_8DOT3_LEN 12
868 return cchMaxFileName > MSDOS_8DOT3_LEN;
919 FIXME(
"%p %lu %s %s %s stub\n",
920 lpszBuffer, dwBuffSize,
debugstr_a(lpszShortName),
937 TRACE(
"%p %u %s %s %s\n",
941 if (!
cchMax || !pszUniqueName)
946 PWSTR pszDest = pszUniqueName;
961 PCWSTR pchDotExt, formatString =
L"%d";
980 while (cchTitle > 1 && (
L'0' <= *
pch && *
pch <=
L'9'))
987#define MSDOS_8DOT3_FILENAME_TITLE_LEN 8
988 if (cchTitle > MSDOS_8DOT3_FILENAME_TITLE_LEN - 1)
989 cchTitle = MSDOS_8DOT3_FILENAME_TITLE_LEN - 1;
992 while (cchTitle > 1 && (dirLength + cchTitle + extLength + 1 > (
cchMax - 1)))
997 else if (cchTitle == 1)
1012 while (*
pch >=
L'0' && *
pch <=
L'9')
1018 openParen =
StrChrW(openParen + 1,
L'(');
1023 pchDotExt = openParen + 1;
1024 cchTitle = pchDotExt - pszTitle;
1029 cchTitle = pchDotExt - pszTitle;
1030 formatString =
L" (%d)";
1036 cchTitle = pchDotExt - pszTitle;
1037 formatString =
L" (%d)";
1040 INT remainingChars =
cchMax - (dirLength + cchTitle + (
lstrlenW(formatString) - 2));
1041 if (remainingChars <= 0)
1043 else if (remainingChars == 1)
1045 else if (remainingChars == 2)
1054 PWSTR pchTitle = pszDest + cchTitle;
1083 FIXME(
"%p %lu %s %s %s stub\n",
1084 lpszBuffer, dwBuffSize,
debugstr_w(lpszShortName),
1101 return PathMakeUniqueNameW(lpszBuffer,dwBuffSize, lpszShortName,lpszLongName,lpszPathName);
1102 return PathMakeUniqueNameA(lpszBuffer,dwBuffSize, lpszShortName,lpszLongName,lpszPathName);
1116 file = longname ? longname : shortname;
1228 TRACE(
"%s\n",pszPath);
1240 PathQualifyExW(pszPath,
NULL, 0);
1257 DWORD iDir, cDirs, cbDirs;
1264 for (cDirs = 0; dirs[cDirs]; ++cDirs)
1267 cbDirs = (cDirs + 1) *
sizeof(
LPWSTR);
1273 for (iDir = 0; iDir < cDirs; ++iDir)
1276 if (dirsW[iDir] ==
NULL)
1290 for (iDir = 0; iDir < cDirs; ++iDir)
1306 dwWhich &= ~WHICH_LNK;
1328 PathSearchOnExtensionsW(
path, dirs,
TRUE, dwWhich))
1335 goto CheckAbsoluteAndFinish;
1353 !PathSearchOnExtensionsW(
path, dirs,
FALSE, dwWhich))
1359CheckAbsoluteAndFinish:
1360#if (_WIN32_WINNT >= _WIN32_WINNT_WS03)
1364 if (!PathMakeAbsoluteW(
path))
1389 FIXME(
"%s\n",pszPath);
1503 FIXME(
"%s %p 0x%04lx 0x%04lx stub\n",
1504 lpszPath, lpszBuff, dwBuffSize,
dwFlags);
1505 if(!lpszPath)
return -1;
1506 if(lpszBuff)
strcpy(lpszBuff, lpszPath);
1520 FIXME(
"(%s, %p, 0x%04lx, 0x%04lx) stub\n",
1522 if(!lpszPath)
return -1;
1523 if(lpszBuff)
lstrcpyW(lpszBuff, lpszPath);
1569#define CSIDL_CONTACTS 0x0043
1570#define CSIDL_DOWNLOADS 0x0047
1571#define CSIDL_LINKS 0x004d
1572#define CSIDL_APPDATA_LOCALLOW 0x004e
1573#define CSIDL_SAVED_GAMES 0x0062
1574#define CSIDL_SEARCHES 0x0063
1599 *
ppv = &
This->IApplicationDestinations_iface;
1602 TRACE(
"Returning IApplicationDestinations: %p\n", *
ppv);
1688 hr = IUnknown_QueryInterface(&
This->IApplicationDestinations_iface,
riid,
ppv);
1718 *
ppv = &
This->IApplicationDocumentLists_iface;
1721 TRACE(
"Returning IApplicationDocumentLists: %p\n", *
ppv);
1765 APPDOCLISTTYPE list_type,
UINT item_count,
1800 hr = IUnknown_QueryInterface(&
This->IApplicationDocumentLists_iface,
riid,
ppv);
1822 INT nShell32IconIndex;
1829 .
id = &FOLDERID_Desktop,
1831 .value =
L"Desktop",
1832 .category = KF_CATEGORY_PERUSER,
1838 .id = &FOLDERID_InternetFolder,
1840 .category = KF_CATEGORY_VIRTUAL,
1841 .name =
L"InternetFolder",
1842 .parsing =
L"::{871C5380-42A0-1069-A2EA-08002B30309D}",
1845 .id = &FOLDERID_Programs,
1847 .value =
L"Programs",
1848 .category = KF_CATEGORY_PERUSER,
1849 .
name =
L"Programs",
1850 .parent = &FOLDERID_StartMenu,
1851 .path =
L"Programs",
1855 .id = &FOLDERID_ControlPanelFolder,
1857 .category = KF_CATEGORY_VIRTUAL,
1858 .name =
L"ControlPanelFolder",
1859 .path =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}",
1860 .parsing =
L"::{26EE0668-A00A-44D7-9371-BEB064C98683}\\0",
1866 .id = &FOLDERID_PrintersFolder,
1868 .category = KF_CATEGORY_VIRTUAL,
1869 .name =
L"PrintersFolder",
1870 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}",
1876 .id = &FOLDERID_Documents,
1878 .value =
L"Personal",
1879 .category = KF_CATEGORY_PERUSER,
1880 .
name =
L"Personal",
1881 .parent = &FOLDERID_Profile,
1882 .path =
L"Documents",
1883 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}\\{FDD39AD0-238F-46AF-ADB4-6C85480369C7}",
1891 .id = &FOLDERID_Favorites,
1893 .value =
L"Favorites",
1894 .category = KF_CATEGORY_PERUSER,
1895 .
name =
L"Favorites",
1896 .path =
L"Favorites",
1904 .id = &FOLDERID_Startup,
1906 .value =
L"StartUp",
1907 .category = KF_CATEGORY_PERUSER,
1909 .parent = &FOLDERID_Programs,
1915 .id = &FOLDERID_Recent,
1918 .category = KF_CATEGORY_PERUSER,
1920 .parent = &FOLDERID_RoamingAppData,
1921 .path =
L"Microsoft\\Windows\\Recent",
1929 .id = &FOLDERID_SendTo,
1932 .category = KF_CATEGORY_PERUSER,
1934 .parent = &FOLDERID_RoamingAppData,
1935 .path =
L"Microsoft\\Windows\\SendTo",
1939 .id = &FOLDERID_RecycleBinFolder,
1941 .category = KF_CATEGORY_VIRTUAL,
1942 .name =
L"RecycleBinFolder",
1943 .parsing =
L"::{645FF040-5081-101B-9F08-00AA002F954E}",
1946 .id = &FOLDERID_StartMenu,
1948 .value =
L"Start Menu",
1949 .category = KF_CATEGORY_PERUSER,
1950 .
name =
L"Start Menu",
1951 .parent = &FOLDERID_RoamingAppData,
1952 .path =
L"Microsoft\\Windows\\Start Menu",
1967 .id = &FOLDERID_Music,
1969 .value =
L"My Music",
1970 .category = KF_CATEGORY_PERUSER,
1971 .
name =
L"My Music",
1972 .parent = &FOLDERID_Profile,
1974 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}\\{4BD8D571-6D19-48D3-BE97-422220080E43}",
1982 .id = &FOLDERID_Videos,
1984 .value =
L"My Videos",
1985 .category = KF_CATEGORY_PERUSER,
1986 .
name =
L"My Video",
1987 .parent = &FOLDERID_Profile,
1989 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}\\{18989B1D-99B5-455B-841C-AB7C74E4DDFC}",
2001 .id = &FOLDERID_Desktop,
2003 .value =
L"Desktop",
2004 .category = KF_CATEGORY_PERUSER,
2006 .parent = &FOLDERID_Profile,
2011 .nShell32IconIndex = 0
2015 .id = &FOLDERID_ComputerFolder,
2017 .category = KF_CATEGORY_VIRTUAL,
2018 .name =
L"MyComputerFolder",
2019 .parsing =
L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}",
2025 .id = &FOLDERID_NetworkFolder,
2027 .category = KF_CATEGORY_VIRTUAL,
2028 .name =
L"NetworkPlacesFolder",
2029 .parsing =
L"::{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}",
2035 .id = &FOLDERID_NetHood,
2037 .value =
L"NetHood",
2038 .category = KF_CATEGORY_PERUSER,
2040 .parent = &FOLDERID_RoamingAppData,
2041 .path =
L"Microsoft\\Windows\\Network Shortcuts",
2047 .id = &FOLDERID_Fonts,
2050 .def_path =
L"Fonts",
2051 .category = KF_CATEGORY_FIXED,
2053 .parent = &FOLDERID_Windows,
2054 .typeid = &FOLDERID_Windows,
2060 .id = &FOLDERID_Templates,
2062 .value =
L"Templates",
2063 .category = KF_CATEGORY_PERUSER,
2064 .
name =
L"Templates",
2065 .parent = &FOLDERID_RoamingAppData,
2066 .path =
L"Microsoft\\Windows\\Templates",
2069 .id = &FOLDERID_CommonStartMenu,
2071 .value =
L"Common Start Menu",
2072 .category = KF_CATEGORY_COMMON,
2073 .
name =
L"Common Start Menu",
2074 .parent = &FOLDERID_ProgramData,
2075 .path =
L"Microsoft\\Windows\\Start Menu",
2082 .id = &FOLDERID_CommonPrograms,
2084 .value =
L"Common Programs",
2085 .category = KF_CATEGORY_COMMON,
2086 .
name =
L"Common Programs",
2087 .parent = &FOLDERID_CommonStartMenu,
2088 .path =
L"Programs",
2092 .id = &FOLDERID_CommonStartup,
2094 .value =
L"Common StartUp",
2095 .category = KF_CATEGORY_COMMON,
2096 .
name =
L"Common Startup",
2097 .parent = &FOLDERID_CommonPrograms,
2103 .id = &FOLDERID_PublicDesktop,
2105 .value =
L"Common Desktop",
2106 .category = KF_CATEGORY_COMMON,
2107 .
name =
L"Common Desktop",
2108 .parent = &FOLDERID_Public,
2114 .id = &FOLDERID_RoamingAppData,
2116 .value =
L"AppData",
2117 .category = KF_CATEGORY_PERUSER,
2119 .parent = &FOLDERID_Profile,
2120 .path =
L"AppData\\Roaming",
2123 .id = &FOLDERID_PrintHood,
2125 .value =
L"PrintHood",
2126 .category = KF_CATEGORY_PERUSER,
2127 .
name =
L"PrintHood",
2128 .parent = &FOLDERID_RoamingAppData,
2129 .path =
L"Microsoft\\Windows\\Printer Shortcuts",
2135 .id = &FOLDERID_LocalAppData,
2137 .value =
L"Local AppData",
2138 .category = KF_CATEGORY_PERUSER,
2139 .
name =
L"Local AppData",
2140 .parent = &FOLDERID_Profile,
2141 .path =
L"AppData\\Local",
2153 .id = &FOLDERID_Favorites,
2155 .value =
L"Common Favorites",
2156 .category = KF_CATEGORY_PERUSER,
2157 .
name =
L"Favorites",
2158 .parent = &FOLDERID_Profile,
2159 .path =
L"Favorites",
2167 .id = &FOLDERID_InternetCache,
2170 .category = KF_CATEGORY_PERUSER,
2172 .parent = &FOLDERID_LocalAppData,
2173 .path =
L"Microsoft\\Windows\\INetCache",
2177 .id = &FOLDERID_Cookies,
2179 .value =
L"Cookies",
2180 .category = KF_CATEGORY_PERUSER,
2182 .parent = &FOLDERID_LocalAppData,
2183 .path =
L"Microsoft\\Windows\\INetCookies",
2186 .id = &FOLDERID_History,
2188 .value =
L"History",
2189 .category = KF_CATEGORY_PERUSER,
2191 .parent = &FOLDERID_LocalAppData,
2192 .path =
L"Microsoft\\Windows\\History",
2196 .id = &FOLDERID_ProgramData,
2198 .value =
L"Common AppData",
2199 .category = KF_CATEGORY_FIXED,
2200 .
name =
L"Common AppData",
2203 .id = &FOLDERID_Windows,
2205 .category = KF_CATEGORY_FIXED,
2209 .id = &FOLDERID_System,
2211 .category = KF_CATEGORY_FIXED,
2215 .id = &FOLDERID_ProgramFiles,
2217 .value =
L"ProgramFilesDir",
2218 .def_path =
L"Program Files",
2219 .category = KF_CATEGORY_FIXED,
2220 .
name =
L"ProgramFiles",
2224 .id = &FOLDERID_Pictures,
2226 .value =
L"My Pictures",
2227 .category = KF_CATEGORY_PERUSER,
2228 .
name =
L"My Pictures",
2229 .parent = &FOLDERID_Profile,
2230 .path =
L"Pictures",
2231 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}\\{33E28130-4E1E-4676-835A-98395C3BC3BB}",
2239 .id = &FOLDERID_Profile,
2241 .category = KF_CATEGORY_FIXED,
2245 .id = &FOLDERID_SystemX86,
2247 .category = KF_CATEGORY_FIXED,
2248 .name =
L"SystemX86",
2254 .id = &FOLDERID_ProgramFilesX86,
2256 .value =
L"ProgramFilesDir (x86)",
2257 .def_path =
L"Program Files (x86)",
2258 .category = KF_CATEGORY_FIXED,
2259 .
name =
L"ProgramFilesX86",
2263 .id = &FOLDERID_ProgramFilesCommon,
2265 .value =
L"CommonFilesDir",
2266 .def_path =
L"Program Files\\Common Files",
2267 .category = KF_CATEGORY_FIXED,
2268 .
name =
L"ProgramFilesCommon",
2271 .id = &FOLDERID_ProgramFilesCommonX86,
2273 .value =
L"CommonFilesDir (x86)",
2274 .def_path =
L"Program Files (x86)\\Common Files",
2275 .category = KF_CATEGORY_FIXED,
2276 .
name =
L"ProgramFilesCommonX86",
2279 .id = &FOLDERID_CommonTemplates,
2281 .value =
L"Common Templates",
2282 .category = KF_CATEGORY_COMMON,
2283 .
name =
L"Common Templates",
2284 .parent = &FOLDERID_ProgramData,
2285 .path =
L"Microsoft\\Windows\\Templates",
2288 .id = &FOLDERID_PublicDocuments,
2290 .value =
L"Common Documents",
2291 .category = KF_CATEGORY_COMMON,
2292 .
name =
L"Common Documents",
2293 .parent = &FOLDERID_Public,
2294 .path =
L"Documents",
2302 .id = &FOLDERID_CommonAdminTools,
2304 .value =
L"Common Administrative Tools",
2305 .category = KF_CATEGORY_COMMON,
2306 .
name =
L"Common Administrative Tools",
2307 .parent = &FOLDERID_CommonPrograms,
2308 .path =
L"Administrative Tools",
2313 .id = &FOLDERID_AdminTools,
2315 .value =
L"Administrative Tools",
2316 .category = KF_CATEGORY_PERUSER,
2317 .
name =
L"Administrative Tools",
2318 .parent = &FOLDERID_Programs,
2319 .path =
L"Administrative Tools",
2324 .id = &FOLDERID_ConnectionsFolder,
2326 .category = KF_CATEGORY_VIRTUAL,
2327 .name =
L"ConnectionsFolder",
2328 .path =
L"Administrative Tools",
2329 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}",
2344 .id = &FOLDERID_PublicMusic,
2346 .value =
L"CommonMusic",
2347 .category = KF_CATEGORY_COMMON,
2348 .
name =
L"CommonMusic",
2349 .parent = &FOLDERID_Public,
2358 .id = &FOLDERID_PublicPictures,
2360 .value =
L"CommonPictures",
2361 .category = KF_CATEGORY_COMMON,
2362 .
name =
L"CommonPictures",
2363 .parent = &FOLDERID_Public,
2364 .path =
L"Pictures",
2372 .id = &FOLDERID_PublicVideos,
2374 .value =
L"CommonVideo",
2375 .category = KF_CATEGORY_COMMON,
2376 .
name =
L"CommonVideo",
2377 .parent = &FOLDERID_Public,
2386 .id = &FOLDERID_ResourceDir,
2388 .def_path =
L"Resources",
2389 .category = KF_CATEGORY_FIXED,
2390 .
name =
L"ResourceDir",
2393 .id = &FOLDERID_LocalizedResourcesDir,
2395 .category = KF_CATEGORY_FIXED,
2396 .name =
L"LocalizedResourcesDir",
2399 .id = &FOLDERID_CommonOEMLinks,
2401 .category = KF_CATEGORY_COMMON,
2402 .name =
L"OEM Links",
2403 .parent = &FOLDERID_ProgramData,
2404 .path =
L"OEM Links",
2407 .id = &FOLDERID_CDBurning,
2409 .value =
L"CD Burning",
2410 .category = KF_CATEGORY_PERUSER,
2411 .
name =
L"CD Burning",
2412 .parent = &FOLDERID_LocalAppData,
2413 .path =
L"Microsoft\\Windows\\Burn\\Burn",
2430 .id = &FOLDERID_AddNewPrograms,
2432 .category = KF_CATEGORY_VIRTUAL,
2433 .name =
L"AddNewProgramsFolder",
2434 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{15eae92e-f17a-4431-9f28-805e482dafd4}",
2437 .id = &FOLDERID_AppUpdates,
2439 .category = KF_CATEGORY_VIRTUAL,
2440 .name =
L"AppUpdatesFolder",
2441 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7b81be6a-ce2b-4676-a29e-eb907a5126c5}\\::{d450a8a1-9568-45c7-9c0e-b4f9fb4537bd}",
2444 .id = &FOLDERID_ChangeRemovePrograms,
2446 .category = KF_CATEGORY_VIRTUAL,
2447 .name =
L"ChangeRemoveProgramsFolder",
2448 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7b81be6a-ce2b-4676-a29e-eb907a5126c5}",
2451 .id = &FOLDERID_ConflictFolder,
2453 .category = KF_CATEGORY_VIRTUAL,
2454 .name =
L"ConflictFolder",
2455 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF}\\::{E413D040-6788-4C22-957E-175D1C513A34},",
2458 .id = &FOLDERID_Contacts,
2460 .category = KF_CATEGORY_PERUSER,
2461 .name =
L"Contacts",
2462 .parent = &FOLDERID_Profile,
2463 .path =
L"Contacts",
2464 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}\\{56784854-C6CB-462B-8169-88E350ACB882}",
2469 .id = &FOLDERID_DeviceMetadataStore,
2471 .category = KF_CATEGORY_COMMON,
2472 .name =
L"Device Metadata Store",
2473 .parent = &FOLDERID_ProgramData,
2474 .path =
L"Microsoft\\Windows\\DeviceMetadataStore",
2481 .id = &FOLDERID_DocumentsLibrary,
2483 .category = KF_CATEGORY_PERUSER,
2484 .name =
L"DocumentsLibrary",
2485 .parent = &FOLDERID_Libraries,
2486 .path =
L"Documents.library-ms",
2487 .parsing =
L"::{031E4825-7B94-4dc3-B131-E946B44C8DD5}\\{7b0db17d-9cd2-4a93-9733-46cc89022e7c}",
2491 .id = &FOLDERID_Downloads,
2493 .category = KF_CATEGORY_PERUSER,
2494 .name =
L"Downloads",
2495 .parent = &FOLDERID_Profile,
2496 .path =
L"Downloads",
2501 .id = &FOLDERID_Games,
2503 .category = KF_CATEGORY_VIRTUAL,
2505 .parsing =
L"::{ED228FDF-9EA8-4870-83b1-96b02CFE0D52}",
2508 .id = &FOLDERID_GameTasks,
2510 .category = KF_CATEGORY_PERUSER,
2511 .name =
L"GameTasks",
2512 .parent = &FOLDERID_LocalAppData,
2513 .path =
L"Microsoft\\Windows\\GameExplorer",
2517 .id = &FOLDERID_HomeGroup,
2519 .category = KF_CATEGORY_VIRTUAL,
2520 .name =
L"HomeGroupFolder",
2521 .parsing =
L"::{B4FB3F98-C1EA-428d-A78A-D1F5659CBA93}",
2524 .id = &FOLDERID_ImplicitAppShortcuts,
2526 .category = KF_CATEGORY_PERUSER,
2527 .name =
L"ImplicitAppShortcuts",
2528 .parent = &FOLDERID_UserPinned,
2529 .path =
L"ImplicitAppShortcuts",
2533 .id = &FOLDERID_Libraries,
2535 .category = KF_CATEGORY_PERUSER,
2536 .name =
L"Libraries",
2537 .parent = &FOLDERID_RoamingAppData,
2538 .path =
L"Microsoft\\Windows\\Libraries",
2542 .id = &FOLDERID_Links,
2544 .category = KF_CATEGORY_PERUSER,
2546 .parent = &FOLDERID_Profile,
2548 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}\\{bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968}",
2553 .id = &FOLDERID_LocalAppDataLow,
2555 .category = KF_CATEGORY_PERUSER,
2556 .name =
L"LocalAppDataLow",
2557 .parent = &FOLDERID_Profile,
2558 .path =
L"AppData\\LocalLow",
2563 .id = &FOLDERID_MusicLibrary,
2565 .category = KF_CATEGORY_PERUSER,
2566 .name =
L"MusicLibrary",
2567 .parent = &FOLDERID_Libraries,
2568 .path =
L"Music.library-ms",
2569 .parsing =
L"::{031E4825-7B94-4dc3-B131-E946B44C8DD5}\\{2112AB0A-C86A-4ffe-A368-0DE96E47012E}",
2573 .id = &FOLDERID_OriginalImages,
2575 .category = KF_CATEGORY_PERUSER,
2576 .name =
L"Original Images",
2577 .parent = &FOLDERID_LocalAppData,
2578 .path =
L"Microsoft\\Windows Photo Gallery\\Original Images",
2581 .id = &FOLDERID_PhotoAlbums,
2583 .category = KF_CATEGORY_PERUSER,
2584 .name =
L"PhotoAlbums",
2585 .parent = &FOLDERID_Pictures,
2586 .path =
L"Slide Shows",
2590 .id = &FOLDERID_PicturesLibrary,
2592 .category = KF_CATEGORY_PERUSER,
2593 .name =
L"PicturesLibrary",
2594 .parent = &FOLDERID_Libraries,
2595 .path =
L"Pictures.library-ms",
2596 .parsing =
L"::{031E4825-7B94-4dc3-B131-E946B44C8DD5}\\{A990AE9F-A03B-4e80-94BC-9912D7504104}",
2600 .id = &FOLDERID_Playlists,
2602 .category = KF_CATEGORY_PERUSER,
2603 .name =
L"Playlists",
2604 .parent = &FOLDERID_Music,
2605 .path =
L"Playlists",
2609 .id = &FOLDERID_ProgramFilesX64,
2612 .value =
L"ProgramFilesDir",
2613 .def_path =
L"Program Files",
2617 .category = KF_CATEGORY_FIXED,
2618 .name =
L"ProgramFilesX64",
2621 .id = &FOLDERID_ProgramFilesCommonX64,
2624 .value =
L"ProgramFilesCommonX64",
2625 .def_path =
L"Program Files\\Common Files",
2629 .category = KF_CATEGORY_FIXED,
2630 .name =
L"ProgramFilesCommonX64",
2633 .id = &FOLDERID_Public,
2635 .category = KF_CATEGORY_FIXED,
2637 .parsing =
L"::{4336a54d-038b-4685-ab02-99bb52d3fb8b}",
2642 .id = &FOLDERID_PublicDownloads,
2644 .category = KF_CATEGORY_COMMON,
2645 .name =
L"CommonDownloads",
2646 .parent = &FOLDERID_Public,
2647 .path =
L"Downloads",
2652 .id = &FOLDERID_PublicGameTasks,
2654 .category = KF_CATEGORY_COMMON,
2655 .name =
L"PublicGameTasks",
2656 .parent = &FOLDERID_ProgramData,
2657 .path =
L"Microsoft\\Windows\\GameExplorer",
2661 .id = &FOLDERID_PublicLibraries,
2663 .category = KF_CATEGORY_COMMON,
2664 .name =
L"PublicLibraries",
2665 .parent = &FOLDERID_Public,
2666 .path =
L"Libraries",
2671 .id = &FOLDERID_PublicRingtones,
2673 .category = KF_CATEGORY_COMMON,
2674 .name =
L"CommonRingtones",
2675 .parent = &FOLDERID_ProgramData,
2676 .path =
L"Microsoft\\Windows\\Ringtones",
2680 .id = &FOLDERID_QuickLaunch,
2682 .category = KF_CATEGORY_PERUSER,
2683 .name =
L"Quick Launch",
2684 .parent = &FOLDERID_RoamingAppData,
2685 .path =
L"Microsoft\\Internet Explorer\\Quick Launch",
2688 .id = &FOLDERID_RecordedTVLibrary,
2690 .category = KF_CATEGORY_COMMON,
2691 .name =
L"RecordedTVLibrary",
2692 .parent = &FOLDERID_PublicLibraries,
2693 .path =
L"RecordedTV.library-ms",
2697 .id = &FOLDERID_Ringtones,
2699 .category = KF_CATEGORY_PERUSER,
2700 .name =
L"Ringtones",
2701 .parent = &FOLDERID_LocalAppData,
2702 .path =
L"Microsoft\\Windows\\Ringtones",
2706 .id = &FOLDERID_SampleMusic,
2708 .category = KF_CATEGORY_COMMON,
2709 .name =
L"SampleMusic",
2710 .parent = &FOLDERID_PublicMusic,
2711 .path =
L"Sample Music",
2716 .id = &FOLDERID_SamplePictures,
2718 .category = KF_CATEGORY_COMMON,
2719 .name =
L"SamplePictures",
2720 .parent = &FOLDERID_PublicPictures,
2721 .path =
L"Sample Pictures",
2726 .id = &FOLDERID_SamplePlaylists,
2728 .category = KF_CATEGORY_COMMON,
2729 .name =
L"SamplePlaylists",
2730 .parent = &FOLDERID_PublicMusic,
2731 .path =
L"Sample Playlists",
2736 .id = &FOLDERID_SampleVideos,
2738 .category = KF_CATEGORY_COMMON,
2739 .name =
L"SampleVideos",
2740 .parent = &FOLDERID_PublicVideos,
2741 .path =
L"Sample Videos",
2746 .id = &FOLDERID_SavedGames,
2748 .category = KF_CATEGORY_PERUSER,
2749 .name =
L"SavedGames",
2750 .parent = &FOLDERID_Profile,
2751 .path =
L"Saved Games",
2752 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}\\{4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4}",
2757 .id = &FOLDERID_SavedSearches,
2759 .category = KF_CATEGORY_PERUSER,
2760 .name =
L"Searches",
2761 .parent = &FOLDERID_Profile,
2762 .path =
L"Searches",
2763 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}\\{7d1d3a04-debb-4115-95cf-2f29da2920da}",
2768 .id = &FOLDERID_SEARCH_CSC,
2770 .category = KF_CATEGORY_VIRTUAL,
2771 .name =
L"CSCFolder",
2772 .parsing =
L"shell:::{BD7A2E7B-21CB-41b2-A086-B309680C6B7E}\\*",
2775 .id = &FOLDERID_SEARCH_MAPI,
2777 .category = KF_CATEGORY_VIRTUAL,
2778 .name =
L"MAPIFolder",
2779 .parsing =
L"shell:::{89D83576-6BD1-4C86-9454-BEB04E94C819}\\*",
2782 .id = &FOLDERID_SearchHome,
2784 .category = KF_CATEGORY_VIRTUAL,
2785 .name =
L"SearchHomeFolder",
2786 .parsing =
L"::{9343812e-1c37-4a49-a12e-4b2d810d956b}",
2789 .id = &FOLDERID_SidebarDefaultParts,
2791 .category = KF_CATEGORY_COMMON,
2792 .name =
L"Default Gadgets",
2793 .parent = &FOLDERID_ProgramFiles,
2794 .path =
L"Windows Sidebar\\Gadgets",
2797 .id = &FOLDERID_SidebarParts,
2799 .category = KF_CATEGORY_PERUSER,
2801 .parent = &FOLDERID_LocalAppData,
2802 .path =
L"Microsoft\\Windows Sidebar\\Gadgets",
2805 .id = &FOLDERID_SyncManagerFolder,
2807 .category = KF_CATEGORY_VIRTUAL,
2808 .name =
L"SyncCenterFolder",
2809 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF}",
2812 .id = &FOLDERID_SyncResultsFolder,
2814 .category = KF_CATEGORY_VIRTUAL,
2815 .name =
L"SyncResultsFolder",
2816 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF}\\::{BC48B32F-5910-47F5-8570-5074A8A5636A},",
2819 .id = &FOLDERID_SyncSetupFolder,
2821 .category = KF_CATEGORY_VIRTUAL,
2822 .name =
L"SyncSetupFolder",
2823 .parsing =
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF}\\::{F1390A9A-A3F4-4E5D-9C5F-98F3BD8D935C},",
2826 .id = &FOLDERID_UserPinned,
2828 .category = KF_CATEGORY_PERUSER,
2829 .name =
L"User Pinned",
2830 .parent = &FOLDERID_QuickLaunch,
2831 .path =
L"User Pinned",
2836 .id = &FOLDERID_UserProfiles,
2839 .def_path =
L"Users",
2840 .category = KF_CATEGORY_FIXED,
2841 .
name =
L"UserProfiles",
2846 .id = &FOLDERID_UserProgramFiles,
2848 .category = KF_CATEGORY_PERUSER,
2849 .name =
L"UserProgramFiles",
2850 .parent = &FOLDERID_LocalAppData,
2851 .path =
L"Programs",
2854 .id = &FOLDERID_UserProgramFilesCommon,
2856 .category = KF_CATEGORY_PERUSER,
2857 .name =
L"UserProgramFilesCommon",
2858 .parent = &FOLDERID_UserProgramFiles,
2862 .id = &FOLDERID_UsersFiles,
2864 .category = KF_CATEGORY_VIRTUAL,
2865 .name =
L"UsersFilesFolder",
2866 .parsing =
L"::{59031a47-3f72-44a7-89c5-5595fe6b30ee}",
2869 .id = &FOLDERID_UsersLibraries,
2871 .category = KF_CATEGORY_VIRTUAL,
2872 .name =
L"UsersLibrariesFolder",
2873 .parsing =
L"::{031E4825-7B94-4dc3-B131-E946B44C8DD5}",
2876 .id = &FOLDERID_VideosLibrary,
2878 .category = KF_CATEGORY_PERUSER,
2879 .name =
L"VideosLibrary",
2880 .path =
L"Videos.library-ms",
2881 .parsing =
L"::{031E4825-7B94-4dc3-B131-E946B44C8DD5}\\{491E922F-5643-4af4-A7EB-4E7A138D8174}",
2884 .id = &FOLDERID_AccountPictures,
2886 .category = KF_CATEGORY_PERUSER,
2887 .name =
L"AccountPictures",
2888 .parent = &FOLDERID_RoamingAppData,
2889 .path =
L"Microsoft\\Windows\\AccountPictures",
2894 .id = &FOLDERID_Screenshots,
2896 .category = KF_CATEGORY_PERUSER,
2897 .name =
L"Screenshots",
2898 .parent = &FOLDERID_Pictures,
2899 .path =
L"Screenshots",
2903 .id = &FOLDERID_AppDataDocuments,
2905 .category = KF_CATEGORY_PERUSER,
2906 .name =
L"AppDataDocuments",
2907 .parent = &FOLDERID_LocalAppData,
2908 .path =
L"Documents",
2938 LPCWSTR pszPath, pchBackslash;
2941 pchBackslash =
StrChrW(pszStart,
L'\\');
2944 *ppch = (
LPWSTR)(pchBackslash + 1);
2945 *pcch = (pchBackslash - pszStart) + 1;
2956 return SHGetSpecialFolderID(pszPath);
2984 LPCWSTR pShellFolderPath, pUserShellFolderPath;
2985 HKEY userShellFolderKey, shellFolderKey;
2986 DWORD dwType, dwPathLen;
2993 lstrcpyW(shellFolderPath, userPrefix);
2995 lstrcatW(shellFolderPath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders");
2996 pShellFolderPath = shellFolderPath;
2997 lstrcpyW(userShellFolderPath, userPrefix);
2999 lstrcatW(userShellFolderPath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders");
3000 pUserShellFolderPath = userShellFolderPath;
3004 pUserShellFolderPath =
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders";
3005 pShellFolderPath =
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
3008 if (
RegCreateKeyW(rootKey, pShellFolderPath, &shellFolderKey))
3013 if (
RegCreateKeyW(rootKey, pUserShellFolderPath, &userShellFolderKey))
3015 TRACE(
"Failed to create %s\n",
3055 TRACE(
"returning 0x%08lx\n",
hr);
3103 FIXME(
"unsupported for user other than current or default\n");
3159 TRACE(
"returning 0x%08lx\n",
hr);
3200 &dwType, (
LPBYTE)pszPath, &dwPathLen) ||
3228 pszPath[dwPathLen /
sizeof(
WCHAR)] =
'\0';
3240 char InfoBuffer[64];
3251 UserInfo =
malloc(InfoSize);
3252 if (UserInfo ==
NULL)
3282 const WCHAR *szValueName;
3300 FIXME(
"unsupported for user other than current or default\n");
3310 static const WCHAR DefaultW[] =
L".Default";
3314 if (hToken == (
HANDLE)-1)
3317 userPrefix = DefaultW;
3319 else if (hToken ==
NULL)
3325 if (userPrefix ==
NULL)
3337 szValueName = &
buffer[0];
3353 if (userPrefix !=
NULL && userPrefix != DefaultW)
3430 (
LPBYTE)szValue, &dwPathLen);
3434 dwPathLen /=
sizeof(
WCHAR);
3435 szValue[dwPathLen] =
'\0';
3483 if (szSrc[0] !=
'%')
3513 lstrcpyW( def_val + 3,
L"users\\Public" );
3520 goto fallback_expand;
3529 lstrcpyW( def_val + 3,
L"users\\Public" );
3538 HKEY shellFolderKey;
3539 DWORD dwType, dwPathLen =
sizeof(def_val);
3554 lstrcpyW( def_val + 3,
L"ProgramData" );
3567 lstrcpyW(szDest, szProfilesPrefix);
3572 if (!SHELL_GetUserProfileDirectoryW(hToken, szDest, &cchSize))
3573 goto fallback_expand;
3583 goto fallback_expand;
3595 DWORD ret = SHExpandEnvironmentStringsForUserW(hToken, szTemp, szDest,
cchDest);
3606 else if (!
wcscmp( szTemp, szDest ))
break;
3615 TRACE(
"returning 0x%08lx (input was %s, output is %s)\n",
hr,
3626 const WCHAR *
var, *
fmt =
L"\\??\\unix%s/user-dirs.dirs";
3632 if (!(
var =
_wgetenv(
L"WINE_HOST_XDG_CONFIG_HOME" )) ||
var[0] !=
'/')
3635 fmt =
L"%s/.config/user-dirs.dirs";
3675 while (*
p ==
' ' || *
p ==
'\t')
p++;
3678 while (*
p ==
' ' || *
p ==
'\t')
p++;
3679 if (*
p !=
'=')
continue;
3681 while (*
p ==
' ' || *
p ==
'\t')
p++;
3682 if (*
p !=
'"')
continue;
3684 if (*
p !=
'/' &&
strncmp(
p,
"$HOME/", 6 ))
continue;
3687 for (
i = 0; *
p && *
p !=
'"';
i++,
p++)
3689 if (*
p ==
'\\' &&
p[1])
p++;
3705 struct mountmgr_shell_folder *
ioctl;
3711 ioctl->folder_offset =
sizeof(*ioctl);
3738 FIXME(
"failed to connect to mount manager\n" );
3842 TRACE(
"%p,%#x,%p,%#lx,%s,%p\n", hwndOwner,
nFolder, hToken,
dwFlags,
debugstr_a(pszSubPath), pszPath);
3857 if (pszSubPath && pszSubPath[0]) {
3895 TRACE(
"%p,%#x,%p,%#lx,%s,%p\n", hwndOwner,
nFolder, hToken,
dwFlags,
debugstr_w(pszSubPath), pszPath);
3943 FIXME(
"bogus type %d, please fix\n",
type);
3999 ERR(
"Failed to create directory %s.\n",
debugstr_w(szBuildPath));
4004 TRACE(
"Created missing system directory %s\n",
debugstr_w(szBuildPath));
4024 L"%%SystemRoot%%\\system32\\shell32.dll,%d",
4082 const WCHAR *szValueName;
4088 DWORD dwType, dwPathLen;
4091 TRACE(
"%p,%p,%s,%p,%u\n", hRootKey, hToken,
4092 debugstr_w(szUserShellFolderPath), folders, foldersLen);
4112 szValueName = &
buffer[0];
4163 TRACE(
"returning 0x%08lx\n",
hr);
4169 static const UINT folders[] = {
4199 LPCWSTR pUserShellFolderPath, pShellFolderPath;
4204 TRACE(
"%s\n", bDefault ?
"TRUE" :
"FALSE");
4209 lstrcpyW(userShellFolderPath,
L".Default");
4211 lstrcatW(userShellFolderPath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders");
4212 pUserShellFolderPath = userShellFolderPath;
4215 lstrcatW(shellFolderPath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders");
4216 pShellFolderPath = shellFolderPath;
4222 pUserShellFolderPath =
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders";
4223 pShellFolderPath =
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
4227 pShellFolderPath, folders,
ARRAY_SIZE(folders));
4228 TRACE(
"returning 0x%08lx\n",
hr);
4234 static const UINT folders[] = {
4252 L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders",
4253 L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",
4255 TRACE(
"returning 0x%08lx\n",
hr);
4323 unsigned int wfparsing : 1;
4324 unsigned int wfdisplay : 1;
4325 unsigned int hideasdel : 1;
4327 DWORD call_for_attr;
4333 SFGAO_FILESYSANCESTOR|SFGAO_FOLDER|SFGAO_HASSUBFOLDER, SFGAO_FILESYSTEM },
4336 SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_LINK,
4337 SFGAO_HASSUBFOLDER|SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR },
4339 SFGAO_FILESYSANCESTOR|SFGAO_FOLDER|SFGAO_HASSUBFOLDER, SFGAO_FILESYSTEM },
4341 SFGAO_FOLDER|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET },
4343 SFGAO_FOLDER|SFGAO_HASSUBFOLDER },
4345 SFGAO_FOLDER|SFGAO_CANLINK }
4361 if (folders[
i].wfparsing)
4363 if (folders[
i].wfdisplay)
4365 if (folders[
i].hideasdel)
4367 if (folders[
i].
attr)
4370 if (folders[
i].call_for_attr)
4372 (
const BYTE *)&folders[
i].call_for_attr,
sizeof(
DWORD));
4416 WCHAR clsidstr[2 + 38 + 1];
4417 clsidstr[0] = clsidstr[1] =
L':';
4422 IShellFolder_Release(psf);
4479 TRACE(
"%p 0x%08x %p 0x%08lx %p\n",
4534 hr = SHGetFolderLocationHelper(hwndOwner,
CSIDL_CONTROLS, &CLSID_NetworkConnections, ppidl);
4563 TRACE(
"-- (new pidl %p)\n",*ppidl);
4609 FIXME(
"flags 0x%08lx not supported\n",
flags);
4615 WARN(
"Invalid flags mask %#lx.\n",
flags);
4621 FIXME(
"Ignoring KF_FLAG_NOT_PARENT_RELATIVE.\n");
4622 flags &= ~KF_FLAG_NOT_PARENT_RELATIVE;
4631 TRACE(
"Failed to get folder path, %#lx.\n",
hr);
4697 length =
lstrlenW(
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions")+51;
4704 lstrcpyW(*lpPath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions\\");
4770 else if(
category == KF_CATEGORY_PERUSER)
4779 free(lpRegistryPath);
4788 KF_REDIRECT_FLAGS
flags,
4798 TRACE(
"(%s, %p, 0x%08x, %s, %d, %p, %p)\n",
debugstr_guid(rfid),
hwnd,
flags,
debugstr_w(pszTargetPath), cFolders, pExclusion, ppszError);
4800 if (ppszError) *ppszError =
NULL;
4807 free(lpRegistryPath);
4850 fileOp.
pTo = dstPath;
4889 IKnownFolder *iface )
4896 IKnownFolder *iface )
4910 IKnownFolder *iface,
4926 TRACE(
"IID_IMarshal returning NULL.\n");
4934 IKnownFolder_AddRef( iface );
4971 IKnownFolder *iface,
4976 TRACE(
"%p\n", pkfid);
4983 IKnownFolder *iface,
4984 KF_CATEGORY *pCategory)
5002 IKnownFolder *iface,
5020 WCHAR parentGuid[39];
5022 LPWSTR parentRegistryPath, parentPath;
5029 dwSize =
sizeof(parentGuid);
5041 free(parentRegistryPath);
5048 free(parentRegistryPath);
5060 else if(
category == KF_CATEGORY_PERUSER)
5063 if(hRedirectionRootKey)
5143 IKnownFolder *iface,
5154 IKnownFolder *iface,
5174 IKnownFolder *iface,
5184 IKnownFolder *iface,
5187 FIXME(
"%p\n", pftid);
5192 IKnownFolder *iface,
5195 FIXME(
"%p stub\n", pCapabilities);
5202 IKnownFolder *iface,
5208 WCHAR parentGuid[39];
5225 dwSize =
sizeof(parentGuid);
5264 kf =
malloc(
sizeof(*kf) );
5329 TRACE(
"IID_IMarshal returning NULL.\n");
5337 IKnownFolderManager_AddRef( iface );
5346 TRACE(
"%d, %p\n", nCsidl, pfid);
5376 TRACE(
"%p, %p\n", ppKFId, pCount);
5414 IKnownFolder **ppkf)
5424 WARN(
"unknown folder\n");
5442 IKnownFolder **ppkf)
5517 WCHAR sParentGuid[39];
5567 IKnownFolder **ppkf)
5576 IKnownFolder **ppkf)
5578 FIXME(
"%p, %p\n", pidl, ppkf);
5586 KF_REDIRECT_FLAGS
flags,
5617 fm =
malloc(
sizeof(*fm) );
5645 TRACE(
"returning iface %p\n", *
ppv);
5669 FIXME(
"unsupported flags: 0x%08lx\n",
flags);
5672 FIXME(
"user token is not used.\n");
5677 else if (
IsEqualIID(rfid, &FOLDERID_RecycleBinFolder))
5679 else if (
IsEqualIID(rfid, &FOLDERID_ComputerFolder))
5681 else if (
IsEqualIID(rfid, &FOLDERID_PrintersFolder))
5683 else if (
IsEqualIID(rfid, &FOLDERID_ControlPanelFolder))
5685 else if (
IsEqualIID(rfid, &FOLDERID_NetworkFolder))
5687 else if (
IsEqualIID(rfid, &FOLDERID_Documents))
#define PRF_TRYPROGRAMEXTENSIONS
#define PRF_REQUIREABSOLUTE
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void shell(int argc, const char *argv[])
#define RegCloseKey(hKey)
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define IDI_SHELL_NETWORK_FOLDER
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR *StringSid)
HRESULT WINAPI IIDFromString(LPCOLESTR str, IID *iid)
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
#define GetCurrentDirectoryW(x, y)
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
#define GetCurrentProcess()
#define WideCharToMultiByte
#define MultiByteToWideChar
static const WCHAR *const ext[]
static void cleanup(void)
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
BOOL WINAPI GetVolumeInformationW(IN LPCWSTR lpRootPathName, IN LPWSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPWSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
BOOL WINAPI GetVolumeInformationA(IN LPCSTR lpRootPathName, IN LPSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
UINT WINAPI GetSystemWow64DirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetFullPathNameA(IN LPCSTR lpFileName, IN DWORD nBufferLength, OUT LPSTR lpBuffer, OUT LPSTR *lpFilePart)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetShortPathNameW(IN LPCWSTR lpszLongPath, OUT LPWSTR lpszShortPath, IN DWORD cchBuffer)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BOOL WINAPI InitOnceExecuteOnce(_Inout_ PINIT_ONCE InitOnce, _In_ __callback PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ LPVOID *Context)
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
BOOL WINAPI PathIsRootA(const char *path)
BOOL WINAPI PathMatchSpecA(const char *path, const char *mask)
BOOL WINAPI PathIsSameRootW(const WCHAR *path1, const WCHAR *path2)
void WINAPI PathRemoveExtensionW(WCHAR *path)
void WINAPI PathRemoveBlanksW(WCHAR *path)
BOOL WINAPI PathIsUNCW(const WCHAR *path)
LPSTR WINAPI PathFindExtensionA(const char *path)
void WINAPI PathRemoveBlanksA(char *path)
void WINAPI PathUnquoteSpacesW(WCHAR *path)
int WINAPI PathGetDriveNumberW(const WCHAR *path)
void WINAPI PathQuoteSpacesA(char *path)
BOOL WINAPI PathRemoveFileSpecA(char *path)
WCHAR *WINAPI PathRemoveBackslashW(WCHAR *path)
BOOL WINAPI PathIsFileSpecA(const char *path)
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
BOOL WINAPI PathFileExistsA(const char *path)
UINT WINAPI PathGetCharTypeA(UCHAR ch)
char *WINAPI PathGetArgsA(const char *path)
void WINAPI PathStripPathA(char *path)
void WINAPI PathStripPathW(WCHAR *path)
BOOL WINAPI PathRemoveFileSpecW(WCHAR *path)
void WINAPI PathRemoveExtensionA(char *path)
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
int WINAPI PathGetDriveNumberA(const char *path)
BOOL WINAPI PathIsRelativeA(const char *path)
int WINAPI PathParseIconLocationA(char *path)
void WINAPI PathUnquoteSpacesA(char *path)
BOOL WINAPI PathIsRelativeW(const WCHAR *path)
int WINAPI PathParseIconLocationW(WCHAR *path)
BOOL WINAPI PathStripToRootW(WCHAR *path)
BOOL WINAPI PathStripToRootA(char *path)
BOOL WINAPI PathIsSameRootA(const char *path1, const char *path2)
BOOL WINAPI PathIsURLW(const WCHAR *path)
BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD class)
BOOL WINAPI PathMatchSpecW(const WCHAR *path, const WCHAR *mask)
WCHAR *WINAPI PathGetArgsW(const WCHAR *path)
UINT WINAPI PathGetCharTypeW(WCHAR ch)
BOOL WINAPI PathFileExistsW(const WCHAR *path)
char *WINAPI PathFindFileNameA(const char *path)
BOOL WINAPI PathIsFileSpecW(const WCHAR *path)
BOOL WINAPI PathIsRootW(const WCHAR *path)
BOOL WINAPI PathIsUNCA(const char *path)
void WINAPI PathQuoteSpacesW(WCHAR *path)
LPWSTR WINAPI CharPrevW(const WCHAR *start, const WCHAR *x)
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
wchar_t *CDECL _wgetenv(const wchar_t *name)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
DWORD WINAPI SHAnsiToUnicode(const char *src, WCHAR *dest, int dest_len)
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
DWORD WINAPI SHDeleteKeyW(HKEY hkey, const WCHAR *subkey)
EXTERN_C HRESULT WINAPI SHCreateItemFromIDList(_In_ PCIDLIST_ABSOLUTE pidl, _In_ REFIID riid, _Out_ void **ppv)
SHSTDAPI SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
const GUID CLSID_UnixDosFolder
EXTERN_C INT Shell_ParseSpecialFolder(_In_ LPCWSTR pszStart, _Out_ LPWSTR *ppch, _Out_ INT *pcch)
const GUID CLSID_UnixFolder
void WINAPI SHFree(LPVOID pv)
LPVOID WINAPI SHAlloc(SIZE_T len)
static HRESULT get_known_folder_dword(const WCHAR *registryPath, const WCHAR *value, DWORD *out)
static LPWSTR PathGetExtensionW(LPCWSTR lpszPath)
#define CSIDL_APPDATA_LOCALLOW
LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive)
static ULONG WINAPI ApplicationDocumentLists_AddRef(IApplicationDocumentLists *iface)
BOOL WINAPI PathQualifyAW(LPCVOID pszPath)
static HRESULT get_known_folder_path_by_id(REFKNOWNFOLDERID folderId, LPWSTR lpRegistryPath, DWORD dwFlags, LPWSTR *ppszPath)
BOOL WINAPI PathIsRootAW(LPCVOID lpszPath)
int WINAPI PathGetDriveNumberAW(LPVOID lpszPath)
void WINAPI PathRemoveBlanksAW(LPVOID str)
static HRESULT set_folder_attributes(void)
static BOOL link_folder(HANDLE mgr, const UNICODE_STRING *path, const char *link)
HRESULT WINAPI ApplicationDestinations_Constructor(IUnknown *outer, REFIID riid, LPVOID *ppv)
static HRESULT WINAPI knownfolder_GetCategory(IKnownFolder *iface, KF_CATEGORY *pCategory)
static ULONG WINAPI ApplicationDocumentLists_Release(IApplicationDocumentLists *iface)
HRESULT SHELL_RegisterShellFolders(void)
static HRESULT WINAPI knownfolder_GetRedirectionCapabilities(IKnownFolder *iface, KF_REDIRECTION_CAPABILITIES *pCapabilities)
LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath, DWORD void1, DWORD void2)
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
LPVOID WINAPI PathFindFileNameAW(LPCVOID lpszPath)
enum _CSIDL_Type CSIDL_Type
BOOL WINAPI IsLFNDriveAW(LPCVOID lpszPath)
static IApplicationDocumentListsImpl * impl_from_IApplicationDocumentLists(IApplicationDocumentLists *iface)
static BOOL WINAPI init_xdg_dirs(INIT_ONCE *once, void *param, void **context)
static HRESULT WINAPI knownfolder_QueryInterface(IKnownFolder *iface, REFIID riid, void **ppv)
void WINAPI PathStripPathAW(LPVOID lpszPath)
static HRESULT get_known_folder_registry_path(REFKNOWNFOLDERID rfid, LPWSTR lpStringGuid, LPWSTR *lpPath)
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
static struct foldermanager * impl_from_IKnownFolderManager(IKnownFolderManager *iface)
LPVOID WINAPI PathAddBackslashAW(LPVOID lpszPath)
static ULONG WINAPI knownfolder_Release(IKnownFolder *iface)
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
BOOL WINAPI PathIsDirectoryAW(LPCVOID lpszPath)
static HRESULT _SHGetCurrentVersionPath(DWORD dwFlags, BYTE folder, LPWSTR pszPath)
static HRESULT WINAPI knownfolder_SetPath(IKnownFolder *iface, DWORD dwFlags, LPCWSTR pszPath)
static BOOL PathMakeUniqueNameW(LPWSTR lpszBuffer, DWORD dwBuffSize, LPCWSTR lpszShortName, LPCWSTR lpszLongName, LPCWSTR lpszPathName)
LPVOID WINAPI PathGetArgsAW(LPVOID lpszPath)
static LPSTR PathGetExtensionA(LPCSTR lpszPath)
static HRESULT _SHRegisterUserShellFolders(BOOL bDefault)
BOOL WINAPI PathAppendAW(LPVOID lpszPath1, LPCVOID lpszPath2)
static HRESULT WINAPI knownfolder_GetShellItem(IKnownFolder *iface, DWORD flags, REFIID riid, void **ppv)
static HRESULT WINAPI foldermanager_GetFolderIds(IKnownFolderManager *iface, KNOWNFOLDERID **ppKFId, UINT *pCount)
void WINAPI PathRemoveArgsAW(LPVOID lpszPath)
static HRESULT get_known_folder_path(LPWSTR sFolderId, LPWSTR registryPath, LPWSTR *ppszPath)
static int csidl_from_id(const KNOWNFOLDERID *id)
static HRESULT WINAPI ApplicationDocumentLists_GetList(IApplicationDocumentLists *iface, APPDOCLISTTYPE list_type, UINT item_count, REFIID riid, void **obj)
static char * get_xdg_path(const char *var)
static HRESULT WINAPI knownfolder_GetFolderType(IKnownFolder *iface, FOLDERTYPEID *pftid)
static BOOL PathQualifyW(LPCWSTR pszPath)
BOOL WINAPI PathStripToRootAW(LPVOID lpszPath)
static HRESULT WINAPI foldermanager_FindFolderFromPath(IKnownFolderManager *iface, LPCWSTR pszPath, FFFP_MODE mode, IKnownFolder **ppkf)
BOOL WINAPI PathResolveAW(void *path, const void **paths, DWORD flags)
static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest)
static void PathGetShortPathA(LPSTR pszPath)
static BOOL PathMakeUniqueNameA(LPSTR lpszBuffer, DWORD dwBuffSize, LPCSTR lpszShortName, LPCSTR lpszLongName, LPCSTR lpszPathName)
static HRESULT WINAPI ApplicationDestinations_RemoveAllDestinations(IApplicationDestinations *iface)
static BOOL PathResolveA(char *path, const char **dirs, DWORD flags)
BOOL WINAPI PathIsExeAW(LPCVOID path)
static BOOL is_knownfolder(struct foldermanager *fm, const KNOWNFOLDERID *id)
BOOL WINAPI PathFileExistsAW(LPCVOID lpszPath)
static HRESULT WINAPI foldermanager_GetFolder(IKnownFolderManager *iface, REFKNOWNFOLDERID rfid, IKnownFolder **ppkf)
static BOOL PathQualifyA(LPCSTR pszPath)
static HRESULT get_known_folder_wstr(const WCHAR *regpath, const WCHAR *value, WCHAR **out)
BOOL WINAPI SHGetSpecialFolderPathAW(HWND hwndOwner, LPVOID szPath, int nFolder, BOOL bCreate)
HRESULT WINAPI SHGetKnownFolderPath(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE token, WCHAR **ret_path)
static HRESULT WINAPI ApplicationDocumentLists_QueryInterface(IApplicationDocumentLists *iface, REFIID riid, LPVOID *ppv)
static const BOOL is_win64
@ CSIDL_Type_SystemX86Path
BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2)
HRESULT WINAPI SHGetFolderPathAndSubDirW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPCWSTR pszSubPath, LPWSTR pszPath)
VOID WINAPI PathQuoteSpacesAW(LPVOID lpszPath)
static DWORD xdg_config_len
static HRESULT _SHOpenProfilesKey(PHKEY pKey)
HRESULT WINAPI SHGetFolderPathEx(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE token, LPWSTR path, DWORD len)
BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath)
BOOL WINAPI PathMatchSpecAW(LPVOID name, LPVOID mask)
int WINAPI PathParseIconLocationAW(LPVOID lpszPath)
#define CSIDL_SAVED_GAMES
BOOL WINAPI PathResolveW(WCHAR *path, const WCHAR **dirs, DWORD flags)
static LONG PathProcessCommandW(LPCWSTR lpszPath, LPWSTR lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
static HRESULT knownfolder_set_id(struct knownfolder *knownfolder, const KNOWNFOLDERID *kfid)
static HRESULT WINAPI ApplicationDestinations_RemoveDestination(IApplicationDestinations *iface, IUnknown *punk)
BOOL WINAPI IsLFNDriveW(LPCWSTR lpszPath)
static ULONG WINAPI foldermanager_AddRef(IKnownFolderManager *iface)
static IApplicationDestinationsImpl * impl_from_IApplicationDestinations(IApplicationDestinations *iface)
static HRESULT foldermanager_create(void **ppv)
static HRESULT WINAPI foldermanager_FolderIdToCsidl(IKnownFolderManager *iface, REFKNOWNFOLDERID rfid, int *pnCsidl)
HRESULT WINAPI ApplicationDocumentLists_Constructor(IUnknown *outer, REFIID riid, LPVOID *ppv)
static HRESULT register_folder(const KNOWNFOLDERID *rfid, const KNOWNFOLDER_DEFINITION *pKFD)
static HRESULT WINAPI foldermanager_GetFolderByName(IKnownFolderManager *iface, LPCWSTR pszCanonicalName, IKnownFolder **ppkf)
static HRESULT _SHGetAllUsersProfilePath(DWORD dwFlags, BYTE folder, LPWSTR pszPath)
HRESULT WINAPI SHGetFolderPathAndSubDirA(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPCSTR pszSubPath, LPSTR pszPath)
static ULONG WINAPI knownfolder_AddRef(IKnownFolder *iface)
static ULONG WINAPI foldermanager_Release(IKnownFolderManager *iface)
static HRESULT WINAPI foldermanager_FolderIdFromCsidl(IKnownFolderManager *iface, int nCsidl, KNOWNFOLDERID *pfid)
static HRESULT WINAPI ApplicationDestinations_SetAppID(IApplicationDestinations *iface, const WCHAR *appid)
static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath)
static void create_link(const WCHAR *path, const char *xdg_name, const char *default_name)
static BOOL PathIsExeA(LPCSTR lpszPath)
static void register_system_knownfolders(void)
LPVOID WINAPI PathFindExtensionAW(LPCVOID lpszPath)
static HRESULT _SHGetProfilesValue(HKEY profilesKey, LPCWSTR szValueName, LPWSTR szValue, LPCWSTR szDefault)
static const CSIDL_DATA CSIDL_Data[]
static HRESULT redirect_known_folder(REFKNOWNFOLDERID rfid, HWND hwnd, KF_REDIRECT_FLAGS flags, LPCWSTR pszTargetPath, UINT cFolders, KNOWNFOLDERID const *pExclusion, LPWSTR *ppszError)
static HRESULT create_extra_folders(void)
static const IApplicationDocumentListsVtbl ApplicationDocumentListsVtbl
static HRESULT WINAPI knownfolder_GetIDList(IKnownFolder *iface, DWORD flags, PIDLIST_ABSOLUTE *ppidl)
BOOL WINAPI PathMakeUniqueNameAW(LPVOID lpszBuffer, DWORD dwBuffSize, LPCVOID lpszShortName, LPCVOID lpszLongName, LPCVOID lpszPathName)
static HRESULT WINAPI foldermanager_RegisterFolder(IKnownFolderManager *iface, REFKNOWNFOLDERID rfid, KNOWNFOLDER_DEFINITION const *pKFD)
static HRESULT WINAPI ApplicationDestinations_QueryInterface(IApplicationDestinations *iface, REFIID riid, LPVOID *ppv)
LONG WINAPI PathProcessCommandAW(LPCVOID lpszPath, LPVOID lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
static BOOL PathIsExeW(LPCWSTR lpszPath)
static HRESULT get_known_folder_redirection_place(REFKNOWNFOLDERID rfid, HKEY *rootKey)
VOID WINAPI PathGetShortPathAW(LPVOID pszPath)
static HRESULT _SHRegisterCommonShellFolders(void)
static LPWSTR _GetUserSidStringFromToken(HANDLE Token)
void WINAPI PathRemoveExtensionAW(LPVOID lpszPath)
static LONG PathProcessCommandA(LPCSTR lpszPath, LPSTR lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
static HRESULT _SHRegisterFolders(HKEY hRootKey, HANDLE hToken, LPCWSTR szUserShellFolderPath, LPCWSTR szShellFolderPath, const UINT folders[], UINT foldersLen)
static HRESULT WINAPI knownfolder_GetId(IKnownFolder *iface, KNOWNFOLDERID *pkfid)
int WINAPI PathCleanupSpec(LPCWSTR lpszPathW, LPWSTR lpszFileW)
static HRESULT WINAPI foldermanager_FindFolderFromIDList(IKnownFolderManager *iface, PCIDLIST_ABSOLUTE pidl, IKnownFolder **ppkf)
static void append_relative_path(BYTE folder, WCHAR *pszPath)
static HRESULT WINAPI knownfolder_GetFolderDefinition(IKnownFolder *iface, KNOWNFOLDER_DEFINITION *pKFD)
static const struct IKnownFolderManagerVtbl foldermanager_vtbl
static HRESULT _SHGetUserProfilePath(HANDLE hToken, DWORD dwFlags, BYTE folder, LPWSTR pszPath)
static struct knownfolder * impl_from_IKnownFolder(IKnownFolder *iface)
BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath)
static HRESULT knownfolder_create(struct knownfolder **knownfolder)
BOOL WINAPI SHGetSpecialFolderPathA(HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate)
HRESULT WINAPI SHGetFolderPathA(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath)
BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR buffer, LPCWSTR path, LPCWSTR shortname, LPCWSTR longname)
VOID WINAPI PathSetDlgItemPathAW(HWND hDlg, int id, LPCVOID pszPath)
HRESULT WINAPI KnownFolderManager_Constructor(IUnknown *punk, REFIID riid, void **ppv)
static HRESULT WINAPI knownfolder_GetPath(IKnownFolder *iface, DWORD dwFlags, LPWSTR *ppszPath)
static HRESULT WINAPI foldermanager_QueryInterface(IKnownFolderManager *iface, REFIID riid, void **ppv)
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs)
static void _SHCreateSymbolicLink(int nFolder, const WCHAR *path)
static HRESULT _SHGetUserShellFolderPath(HKEY rootKey, LPCWSTR userPrefix, LPCWSTR value, LPWSTR path)
static HRESULT WINAPI ApplicationDocumentLists_SetAppID(IApplicationDocumentLists *iface, const WCHAR *appid)
BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath)
LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile)
static void PathGetShortPathW(LPWSTR pszPath)
static ULONG WINAPI ApplicationDestinations_AddRef(IApplicationDestinations *iface)
BOOL WINAPI IsLFNDriveA(LPCSTR lpszPath)
static ULONG WINAPI ApplicationDestinations_Release(IApplicationDestinations *iface)
VOID WINAPI PathUnquoteSpacesAW(LPVOID str)
static const struct IKnownFolderVtbl knownfolder_vtbl
HRESULT WINAPI SHGetKnownFolderItem(REFKNOWNFOLDERID rfid, KNOWN_FOLDER_FLAG flags, HANDLE hToken, REFIID riid, void **ppv)
static HRESULT WINAPI foldermanager_UnregisterFolder(IKnownFolderManager *iface, REFKNOWNFOLDERID rfid)
static const IApplicationDestinationsVtbl ApplicationDestinationsVtbl
static HRESULT WINAPI foldermanager_Redirect(IKnownFolderManager *iface, REFKNOWNFOLDERID rfid, HWND hwnd, KF_REDIRECT_FLAGS flags, LPCWSTR pszTargetPath, UINT cFolders, KNOWNFOLDERID const *pExclusion, LPWSTR *ppszError)
HRESULT WINAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE token, PIDLIST_ABSOLUTE *pidl)
VOID WINAPI FixSlashesAndColonW(LPWSTR lpwstr)
void WINAPI PathRemoveArgsW(LPWSTR lpszPath)
BOOL WINAPI PathFileExistsDefExtA(LPSTR lpszPath, DWORD dwWhich)
BOOL WINAPI PathIsDirectoryA(LPCSTR lpszPath)
LPSTR WINAPI PathBuildRootA(LPSTR lpszPath, int drive)
BOOL WINAPI PathFindOnPathExA(LPSTR lpszFile, LPCSTR *lppszOtherDirs, DWORD dwWhich)
void WINAPI PathRemoveArgsA(LPSTR lpszPath)
BOOL WINAPI PathFindOnPathW(LPWSTR lpszFile, LPCWSTR *lppszOtherDirs)
BOOL WINAPI PathFindOnPathA(LPSTR lpszFile, LPCSTR *lppszOtherDirs)
LPWSTR WINAPI PathBuildRootW(LPWSTR lpszPath, int drive)
VOID WINAPI PathSetDlgItemPathA(HWND hDlg, int id, LPCSTR lpszPath)
BOOL WINAPI PathFindOnPathExW(LPWSTR lpszFile, LPCWSTR *lppszOtherDirs, DWORD dwWhich)
VOID WINAPI PathSetDlgItemPathW(HWND hDlg, int id, LPCWSTR lpszPath)
BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath, DWORD *dwAttr)
BOOL WINAPI PathFileExistsDefExtW(LPWSTR lpszPath, DWORD dwWhich)
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
#define IShellFolder_ParseDisplayName
BOOL WINAPI GetAllUsersProfileDirectoryW(_Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
BOOL WINAPI GetDefaultUserProfileDirectoryW(_Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
BOOL WINAPI GetUserProfileDirectoryW(_In_ HANDLE hToken, _Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
static const WCHAR Cleanup[]
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLuint GLsizei GLsizei * length
GLsizei const GLuint * paths
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
HLOCAL NTAPI LocalFree(HLOCAL hMem)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
TCHAR szTitle[MAX_LOADSTRING]
#define memcpy(s1, s2, n)
#define ERROR_ALREADY_EXISTS
#define ERROR_FILE_NOT_FOUND
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static const WCHAR pathW[]
static const WCHAR path1[]
#define MOUNTMGR_DOS_DEVICE_NAME
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define FILE_ATTRIBUTE_READONLY
#define FILE_ATTRIBUTE_HIDDEN
#define FILE_ATTRIBUTE_SYSTEM
#define KEY_ENUMERATE_SUB_KEYS
#define FILE_ATTRIBUTE_DIRECTORY
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
static HANDLE ACCESS_MASK ULONG attributes
DWORD WINAPI GetShortPathNameA(IN LPCSTR lpszLongPath, OUT LPSTR lpszShortPath, IN DWORD cchBuffer)
#define PathAddBackslashA
#define PathAddBackslashW
LPITEMIDLIST _ILCreateMyComputer(void)
LPITEMIDLIST _ILCreateIExplore(void)
void WINAPI ILFree(LPITEMIDLIST pidl)
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
LPITEMIDLIST _ILCreateDesktop(void)
LPITEMIDLIST _ILCreateNetwork(void)
LPITEMIDLIST _ILCreatePrinters(void)
LPITEMIDLIST _ILCreateControlPanel(void)
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
LPITEMIDLIST _ILCreateMyDocuments(void)
LPITEMIDLIST _ILCreateBitBucket(void)
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
static __inline BOOL SHELL_OsIsUnicode(void)
static __inline LPWSTR __SHCloneStrAtoW(WCHAR **target, const char *source)
int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
int WINAPI SHCreateDirectory(HWND hWnd, LPCWSTR path)
int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
#define CSIDL_COMMON_TEMPLATES
#define CSIDL_COMMON_DESKTOPDIRECTORY
#define CSIDL_PROGRAM_FILES
#define CSIDL_INTERNET_CACHE
_In_ int _In_ BOOL bCreate
#define CSIDL_DESKTOPDIRECTORY
#define CSIDL_COMMON_STARTMENU
#define CSIDL_FLAG_CREATE
#define CSIDL_FLAG_NO_ALIAS
#define CSIDL_COMMON_APPDATA
#define CSIDL_CONNECTIONS
#define CSIDL_COMMON_PROGRAMS
#define CSIDL_FLAG_DONT_VERIFY
#define CSIDL_COMMON_FAVORITES
@ KF_FLAG_NOT_PARENT_RELATIVE
#define CSIDL_LOCAL_APPDATA
#define CSIDL_PROGRAM_FILES_COMMONX86
#define CSIDL_PROGRAM_FILES_COMMON
#define CSIDL_COMMON_MUSIC
#define CSIDL_COMMON_VIDEO
#define CSIDL_FOLDER_MASK
#define CSIDL_PROGRAM_FILESX86
#define CSIDL_COMMON_PICTURES
#define CSIDL_COMMON_STARTUP
#define KF_FLAG_DEFAULT_PATH
#define CSIDL_COMMON_DOCUMENTS
#define CSIDL_COMMON_ADMINTOOLS
enum tagKF_DEFINITION_FLAGS KF_DEFINITION_FLAGS
@ KF_REDIRECTION_CAPABILITIES_DENY_ALL
@ KFDF_PUBLISHEXPANDEDPATH
@ KFDF_LOCAL_REDIRECT_ONLY
pointer_default(unique)] interface IFileDialogCustomize enum tagKF_REDIRECTION_CAPABILITIES KF_REDIRECTION_CAPABILITIES
#define IDI_SHELL_MY_DOCUMENTS
#define IDI_SHELL_MY_MUSIC
#define IDI_SHELL_MY_PICTURES
#define IDI_SHELL_TSKBAR_STARTMENU
#define IDI_SHELL_COMPUTER_FOLDER
#define IDI_SHELL_FAVORITES
#define IDI_SHELL_MY_MOVIES
#define IDI_SHELL_RECENT_DOCUMENTS
#define IDI_SHELL_NETWORK
#define IDI_SHELL_PRINTERS_FOLDER
#define IDI_SHELL_FONTS_FOLDER
#define IDI_SHELL_CONTROL_PANEL
#define IDI_SHELL_SYSTEM_GEAR
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
const KNOWNFOLDERID * parent
KF_DEFINITION_FLAGS flags
IApplicationDestinations IApplicationDestinations_iface
IApplicationDocumentLists IApplicationDocumentLists_iface
IKnownFolderManager IKnownFolderManager_iface
IKnownFolder IKnownFolder_iface
KF_DEFINITION_FLAGS kfdFlags
PCSYMCRYPT_HMAC_MD5_EXPANDED_KEY pKey
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define CONTAINING_RECORD(address, type, field)
#define INVALID_FILE_ATTRIBUTES
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define E_NOT_SUFFICIENT_BUFFER
#define ERROR_PATH_NOT_FOUND
#define CLASS_E_NOAGGREGATION
#define ERROR_FILENAME_EXCED_RANGE
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define HKEY_CLASSES_ROOT
static const WCHAR userName[]
struct _TOKEN_USER * PTOKEN_USER