ReactOS  0.4.15-dev-425-gc40b086
shellpath.c File Reference
#include <wine/config.h>
#include <windef.h>
#include <winbase.h>
#include <shlobj.h>
#include <undocshell.h>
#include <shlwapi.h>
#include <sddl.h>
#include <strsafe.h>
#include <wine/debug.h>
#include <wine/unicode.h>
#include <shlwapi_undoc.h>
#include <shellutils.h>
#include <userenv.h>
#include "pidl.h"
#include "shell32_main.h"
#include "shresdef.h"
Include dependency graph for shellpath.c:

Go to the source code of this file.

Classes

struct  CSIDL_DATA
 

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COBJMACROS
 
#define CSIDL_CONTACTS   0x0043
 
#define CSIDL_DOWNLOADS   0x0047
 
#define CSIDL_LINKS   0x004d
 
#define CSIDL_APPDATA_LOCALLOW   0x004e
 
#define CSIDL_SAVED_GAMES   0x0062
 
#define CSIDL_SEARCHES   0x0063
 

Typedefs

typedef enum _CSIDL_Type CSIDL_Type
 

Enumerations

enum  _CSIDL_Type {
  CSIDL_Type_User, CSIDL_Type_AllUsers, CSIDL_Type_CurrVer, CSIDL_Type_Disallowed,
  CSIDL_Type_NonExistent, CSIDL_Type_WindowsPath, CSIDL_Type_SystemPath, CSIDL_Type_SystemX86Path
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
BOOL WINAPI PathAppendAW (LPVOID lpszPath1, LPCVOID lpszPath2)
 
static LPSTR PathGetExtensionA (LPCSTR lpszPath)
 
static LPWSTR PathGetExtensionW (LPCWSTR lpszPath)
 
LPVOID WINAPI SHPathGetExtensionW (LPCWSTR lpszPath, DWORD void1, DWORD void2)
 
BOOL WINAPI PathRemoveFileSpecAW (LPVOID lpszPath)
 
static void PathGetShortPathA (LPSTR pszPath)
 
static void PathGetShortPathW (LPWSTR pszPath)
 
VOID WINAPI PathGetShortPathAW (LPVOID pszPath)
 
BOOL WINAPI PathIsRootAW (LPCVOID lpszPath)
 
static BOOL PathIsExeA (LPCSTR lpszPath)
 
BOOL PathIsExeW (LPCWSTR lpszPath)
 
BOOL WINAPI PathIsExeAW (LPCVOID path)
 
BOOL WINAPI PathFileExistsAW (LPCVOID lpszPath)
 
BOOL WINAPI IsLFNDriveA (LPCSTR lpszPath)
 
BOOL WINAPI IsLFNDriveW (LPCWSTR lpszPath)
 
BOOL WINAPI IsLFNDriveAW (LPCVOID lpszPath)
 
static BOOL PathMakeUniqueNameA (LPSTR lpszBuffer, DWORD dwBuffSize, LPCSTR lpszShortName, LPCSTR lpszLongName, LPCSTR lpszPathName)
 
static BOOL PathMakeUniqueNameW (LPWSTR lpszBuffer, DWORD dwBuffSize, LPCWSTR lpszShortName, LPCWSTR lpszLongName, LPCWSTR lpszPathName)
 
BOOL WINAPI PathMakeUniqueNameAW (LPVOID lpszBuffer, DWORD dwBuffSize, LPCVOID lpszShortName, LPCVOID lpszLongName, LPCVOID lpszPathName)
 
BOOL WINAPI PathYetAnotherMakeUniqueName (LPWSTR buffer, LPCWSTR path, LPCWSTR shortname, LPCWSTR longname)
 
int WINAPI PathCleanupSpec (LPCWSTR lpszPathW, LPWSTR lpszFileW)
 
static BOOL PathQualifyA (LPCSTR pszPath)
 
static BOOL PathQualifyW (LPCWSTR pszPath)
 
BOOL WINAPI PathQualifyAW (LPCVOID pszPath)
 
static BOOL PathResolveA (LPSTR path, LPCSTR *paths, DWORD flags)
 
static BOOL PathResolveW (LPWSTR path, LPCWSTR *paths, DWORD flags)
 
BOOL WINAPI PathResolveAW (LPVOID path, LPCVOID *paths, DWORD flags)
 
static LONG PathProcessCommandA (LPCSTR lpszPath, LPSTR lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
 
static LONG PathProcessCommandW (LPCWSTR lpszPath, LPWSTR lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
 
LONG WINAPI PathProcessCommandAW (LPCVOID lpszPath, LPVOID lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
 
static HRESULT _SHExpandEnvironmentStrings (LPCWSTR szSrc, LPWSTR szDest)
 
static HRESULT _SHGetUserShellFolderPath (HKEY rootKey, LPCWSTR userPrefix, LPCWSTR value, LPWSTR path)
 
BOOL _SHGetUserProfileDirectoryW (HANDLE hToken, LPWSTR szPath, LPDWORD lpcchPath)
 
static HRESULT _SHGetDefaultValue (BYTE folder, LPWSTR pszPath)
 
static HRESULT _SHGetCurrentVersionPath (DWORD dwFlags, BYTE folder, LPWSTR pszPath)
 
static LPWSTR _GetUserSidStringFromToken (HANDLE Token)
 
static HRESULT _SHGetUserProfilePath (HANDLE hToken, DWORD dwFlags, BYTE folder, LPWSTR pszPath)
 
static HRESULT _SHGetAllUsersProfilePath (DWORD dwFlags, BYTE folder, LPWSTR pszPath)
 
static HRESULT _SHOpenProfilesKey (PHKEY pKey)
 
static HRESULT _SHGetProfilesValue (HKEY profilesKey, LPCWSTR szValueName, LPWSTR szValue, LPCWSTR szDefault)
 
HRESULT WINAPI SHGetFolderPathW (HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
 
HRESULT WINAPI SHGetFolderPathAndSubDirA (HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPCSTR pszSubPath, LPSTR pszPath)
 
HRESULT WINAPI SHGetFolderPathAndSubDirW (HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPCWSTR pszSubPath, LPWSTR pszPath)
 
HRESULT WINAPI SHGetFolderPathA (HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath)
 
static HRESULT _SHRegisterFolders (HKEY hRootKey, HANDLE hToken, LPCWSTR szUserShellFolderPath, LPCWSTR szShellFolderPath, const UINT folders[], UINT foldersLen)
 
static HRESULT _SHRegisterUserShellFolders (BOOL bDefault)
 
static HRESULT _SHRegisterCommonShellFolders (void)
 
HRESULT SHELL_RegisterShellFolders (void)
 
BOOL WINAPI SHGetSpecialFolderPathA (HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate)
 
BOOL WINAPI SHGetSpecialFolderPathW (HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
 
HRESULT WINAPI SHGetFolderLocation (HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
 
HRESULT WINAPI SHGetSpecialFolderLocation (HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
 

Variables

static const BOOL is_win64 = sizeof(void *) > sizeof(int)
 
static const WCHAR szCurrentVersion [] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\0'}
 
static const WCHAR Administrative_ToolsW [] = {'A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'}
 
static const WCHAR AppDataW [] = {'A','p','p','D','a','t','a','\0'}
 
static const WCHAR AppData_LocalLowW [] = {'A','p','p','D','a','t','a','\\','L','o','c','a','l','L','o','w','\0'}
 
static const WCHAR Application_DataW [] = {'A','p','p','l','i','c','a','t','i','o','n',' ','D','a','t','a','\0'}
 
static const WCHAR CacheW [] = {'C','a','c','h','e','\0'}
 
static const WCHAR CD_BurningW [] = {'C','D',' ','B','u','r','n','i','n','g','\0'}
 
static const WCHAR Common_Administrative_ToolsW [] = {'C','o','m','m','o','n',' ','A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'}
 
static const WCHAR Common_AppDataW [] = {'C','o','m','m','o','n',' ','A','p','p','D','a','t','a','\0'}
 
static const WCHAR Common_DesktopW [] = {'C','o','m','m','o','n',' ','D','e','s','k','t','o','p','\0'}
 
static const WCHAR Common_DocumentsW [] = {'C','o','m','m','o','n',' ','D','o','c','u','m','e','n','t','s','\0'}
 
static const WCHAR Common_FavoritesW [] = {'C','o','m','m','o','n',' ','F','a','v','o','r','i','t','e','s','\0'}
 
static const WCHAR CommonFilesDirW [] = {'C','o','m','m','o','n','F','i','l','e','s','D','i','r','\0'}
 
static const WCHAR CommonFilesDirX86W [] = {'C','o','m','m','o','n','F','i','l','e','s','D','i','r',' ','(','x','8','6',')','\0'}
 
static const WCHAR CommonMusicW [] = {'C','o','m','m','o','n','M','u','s','i','c','\0'}
 
static const WCHAR CommonPicturesW [] = {'C','o','m','m','o','n','P','i','c','t','u','r','e','s','\0'}
 
static const WCHAR Common_ProgramsW [] = {'C','o','m','m','o','n',' ','P','r','o','g','r','a','m','s','\0'}
 
static const WCHAR Common_StartUpW [] = {'C','o','m','m','o','n',' ','S','t','a','r','t','U','p','\0'}
 
static const WCHAR Common_Start_MenuW [] = {'C','o','m','m','o','n',' ','S','t','a','r','t',' ','M','e','n','u','\0'}
 
static const WCHAR Common_TemplatesW [] = {'C','o','m','m','o','n',' ','T','e','m','p','l','a','t','e','s','\0'}
 
static const WCHAR CommonVideoW [] = {'C','o','m','m','o','n','V','i','d','e','o','\0'}
 
static const WCHAR ContactsW [] = {'C','o','n','t','a','c','t','s','\0'}
 
static const WCHAR CookiesW [] = {'C','o','o','k','i','e','s','\0'}
 
static const WCHAR DesktopW [] = {'D','e','s','k','t','o','p','\0'}
 
static const WCHAR DocumentsW [] = {'D','o','c','u','m','e','n','t','s','\0'}
 
static const WCHAR DownloadsW [] = {'D','o','w','n','l','o','a','d','s','\0'}
 
static const WCHAR FavoritesW [] = {'F','a','v','o','r','i','t','e','s','\0'}
 
static const WCHAR FontsW [] = {'F','o','n','t','s','\0'}
 
static const WCHAR HistoryW [] = {'H','i','s','t','o','r','y','\0'}
 
static const WCHAR LinksW [] = {'L','i','n','k','s','\0'}
 
static const WCHAR Local_AppDataW [] = {'L','o','c','a','l',' ','A','p','p','D','a','t','a','\0'}
 
static const WCHAR Local_Settings_Application_DataW [] = {'L','o','c','a','l',' ','S','e','t','t','i','n','g','s','\\','A','p','p','l','i','c','a','t','i','o','n',' ','D','a','t','a','\0'}
 
static const WCHAR Local_Settings_CD_BurningW [] = {'L','o','c','a','l',' ','S','e','t','t','i','n','g','s','\\','A','p','p','l','i','c','a','t','i','o','n',' ','D','a','t','a','\\','M','i','c','r','o','s','o','f','t','\\','C','D',' ','B','u','r','n','i','n','g','\0'}
 
static const WCHAR Local_Settings_HistoryW [] = {'L','o','c','a','l',' ','S','e','t','t','i','n','g','s','\\','H','i','s','t','o','r','y','\0'}
 
static const WCHAR Local_Settings_Temporary_Internet_FilesW [] = {'L','o','c','a','l',' ','S','e','t','t','i','n','g','s','\\','T','e','m','p','o','r','a','r','y',' ','I','n','t','e','r','n','e','t',' ','F','i','l','e','s','\0'}
 
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 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'}
 
static const WCHAR Music_Sample_PlaylistsW [] = {'M','u','s','i','c','\\','S','a','m','p','l','e',' ','P','l','a','y','l','i','s','t','s','\0'}
 
static const WCHAR My_MusicW [] = {'M','y',' ','M','u','s','i','c','\0'}
 
static const WCHAR My_PicturesW [] = {'M','y',' ','P','i','c','t','u','r','e','s','\0'}
 
static const WCHAR My_VideoW [] = {'M','y',' ','V','i','d','e','o','\0'}
 
static const WCHAR NetHoodW [] = {'N','e','t','H','o','o','d','\0'}
 
static const WCHAR OEM_LinksW [] = {'O','E','M',' ','L','i','n','k','s','\0'}
 
static const WCHAR PersonalW [] = {'P','e','r','s','o','n','a','l','\0'}
 
static const WCHAR PicturesW [] = {'P','i','c','t','u','r','e','s','\0'}
 
static const WCHAR Pictures_Sample_PicturesW [] = {'P','i','c','t','u','r','e','s','\\','S','a','m','p','l','e',' ','P','i','c','t','u','r','e','s','\0'}
 
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 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 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'}
 
static const WCHAR PublicW [] = {'P','u','b','l','i','c',0}
 
static const WCHAR RecentW [] = {'R','e','c','e','n','t','\0'}
 
static const WCHAR ResourcesW [] = {'R','e','s','o','u','r','c','e','s','\0'}
 
static const WCHAR Saved_GamesW [] = {'S','a','v','e','d',' ','G','a','m','e','s','\0'}
 
static const WCHAR SearchesW [] = {'S','e','a','r','c','h','e','s','\0'}
 
static const WCHAR SendToW [] = {'S','e','n','d','T','o','\0'}
 
static const WCHAR StartUpW [] = {'S','t','a','r','t','U','p','\0'}
 
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 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 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 PublicProfileW [] = {'%','P','U','B','L','I','C','%',0}
 
static const WCHAR UserProfileW [] = {'%','U','S','E','R','P','R','O','F','I','L','E','%','\0'}
 
static const WCHAR SystemDriveW [] = {'%','S','y','s','t','e','m','D','r','i','v','e','%','\0'}
 
static const WCHAR ProfileListW [] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s',' ','N','T','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','P','r','o','f','i','l','e','L','i','s','t',0}
 
static const WCHAR ProfilesDirectoryW [] = {'P','r','o','f','i','l','e','s','D','i','r','e','c','t','o','r','y',0}
 
static const WCHAR AllUsersProfileValueW [] = {'A','l','l','U','s','e','r','s','P','r','o','f','i','l','e','\0'}
 
static const WCHAR szSHFolders [] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','S','h','e','l','l',' ','F','o','l','d','e','r','s','\0'}
 
static const WCHAR szSHUserFolders [] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','U','s','e','r',' ','S','h','e','l','l',' ','F','o','l','d','e','r','s','\0'}
 
static const WCHAR szDefaultProfileDirW [] = {'u','s','e','r','s',0}
 
static const WCHAR szKnownFolderDescriptions [] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','F','o','l','d','e','r','D','e','s','c','r','i','p','t','i','o','n','s','\0'}
 
static const WCHAR szKnownFolderRedirections [] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','U','s','e','r',' ','S','h','e','l','l',' ','F','o','l','d','e','r','s',0}
 
static const WCHAR AllUsersW [] = {'P','u','b','l','i','c',0}
 
static const CSIDL_DATA CSIDL_Data []
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 29 of file shellpath.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 30 of file shellpath.c.

◆ CSIDL_APPDATA_LOCALLOW

#define CSIDL_APPDATA_LOCALLOW   0x004e

Definition at line 716 of file shellpath.c.

◆ CSIDL_CONTACTS

#define CSIDL_CONTACTS   0x0043

Definition at line 713 of file shellpath.c.

◆ CSIDL_DOWNLOADS

#define CSIDL_DOWNLOADS   0x0047

Definition at line 714 of file shellpath.c.

◆ CSIDL_LINKS

#define CSIDL_LINKS   0x004d

Definition at line 715 of file shellpath.c.

◆ CSIDL_SAVED_GAMES

#define CSIDL_SAVED_GAMES   0x0062

Definition at line 717 of file shellpath.c.

◆ CSIDL_SEARCHES

#define CSIDL_SEARCHES   0x0063

Definition at line 718 of file shellpath.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 28 of file shellpath.c.

Typedef Documentation

◆ CSIDL_Type

Enumeration Type Documentation

◆ _CSIDL_Type

Enumerator
CSIDL_Type_User 
CSIDL_Type_AllUsers 
CSIDL_Type_CurrVer 
CSIDL_Type_Disallowed 
CSIDL_Type_NonExistent 
CSIDL_Type_WindowsPath 
CSIDL_Type_SystemPath 
CSIDL_Type_SystemX86Path 

Definition at line 697 of file shellpath.c.

Function Documentation

◆ _GetUserSidStringFromToken()

static LPWSTR _GetUserSidStringFromToken ( HANDLE  Token)
static

Definition at line 1821 of file shellpath.c.

1822 {
1823  char InfoBuffer[64];
1824  PTOKEN_USER UserInfo;
1825  DWORD InfoSize;
1826  LPWSTR SidStr;
1827 
1828  UserInfo = (PTOKEN_USER) InfoBuffer;
1829  if (! GetTokenInformation(Token, TokenUser, InfoBuffer, sizeof(InfoBuffer),
1830  &InfoSize))
1831  {
1833  return NULL;
1834  UserInfo = HeapAlloc(GetProcessHeap(), 0, InfoSize);
1835  if (UserInfo == NULL)
1836  return NULL;
1837  if (! GetTokenInformation(Token, TokenUser, UserInfo, InfoSize,
1838  &InfoSize))
1839  {
1840  HeapFree(GetProcessHeap(), 0, UserInfo);
1841  return NULL;
1842  }
1843  }
1844 
1845  if (! ConvertSidToStringSidW(UserInfo->User.Sid, &SidStr))
1846  SidStr = NULL;
1847 
1848  if (UserInfo != (PTOKEN_USER) InfoBuffer)
1849  HeapFree(GetProcessHeap(), 0, UserInfo);
1850 
1851  return SidStr;
1852 }
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID _Out_ PHANDLE Token
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR *StringSid)
Definition: security.c:3259
smooth NULL
Definition: ftsmooth.c:416
#define GetProcessHeap()
Definition: compat.h:404
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
Definition: security.c:413
struct _TOKEN_USER * PTOKEN_USER
SID_AND_ATTRIBUTES User
Definition: setypes.h:956
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:403
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by _SHGetUserProfilePath().

◆ _SHExpandEnvironmentStrings()

static HRESULT _SHExpandEnvironmentStrings ( LPCWSTR  szSrc,
LPWSTR  szDest 
)
static

Definition at line 2055 of file shellpath.c.

2059 {
2060  HRESULT hr;
2061 #ifndef __REACTOS__
2062  WCHAR szTemp[MAX_PATH], szProfilesPrefix[MAX_PATH] = { 0 };
2063  HKEY key = NULL;
2064 #else
2065  WCHAR szTemp[MAX_PATH];
2066 #endif
2067 
2068  TRACE("%s, %p\n", debugstr_w(szSrc), szDest);
2069 
2070  if (!szSrc || !szDest) return E_INVALIDARG;
2071 
2072  /* short-circuit if there's nothing to expand */
2073  if (szSrc[0] != '%')
2074  {
2075  strcpyW(szDest, szSrc);
2076  hr = S_OK;
2077  goto end;
2078  }
2079 #ifndef __REACTOS__
2080  /* Get the profile prefix, we'll probably be needing it */
2082  if (SUCCEEDED(hr))
2083  {
2084  WCHAR def_val[MAX_PATH];
2085 
2086  /* get the system drive */
2087  GetSystemDirectoryW(def_val, MAX_PATH);
2088  strcpyW( def_val + 3, szDefaultProfileDirW );
2089 
2090  hr = _SHGetProfilesValue(key, ProfilesDirectoryW, szProfilesPrefix, def_val );
2091  }
2092 #else
2093  hr = S_OK;
2094 #endif
2095 
2096  *szDest = 0;
2097  strcpyW(szTemp, szSrc);
2098  while (SUCCEEDED(hr) && szTemp[0] == '%')
2099  {
2101  {
2102 #ifndef __REACTOS__
2104 
2105  strcpyW(szDest, szProfilesPrefix);
2108  PathAppendW(szDest, szAllUsers);
2109 #else
2110  DWORD cchSize = cchDest;
2111  if (!GetAllUsersProfileDirectoryW(szDest, &cchSize))
2112  goto fallback_expand;
2113 #endif
2114  PathAppendW(szDest, szTemp + strlenW(AllUsersProfileW));
2115  }
2116 #ifndef __REACTOS__
2117  else if (!strncmpiW(szTemp, PublicProfileW, strlenW(PublicProfileW)))
2118  {
2119  WCHAR szAllUsers[MAX_PATH], def_val[MAX_PATH];
2120 
2121  GetSystemDirectoryW(def_val, MAX_PATH);
2122  strcpyW( def_val + 3, UsersPublicW );
2123 
2125  PathAppendW(szDest, szAllUsers);
2126  PathAppendW(szDest, szTemp + strlenW(PublicProfileW));
2127  }
2128 #endif
2129  else if (!strncmpiW(szTemp, UserProfileW, strlenW(UserProfileW)))
2130  {
2131 #ifndef __REACTOS__
2133  DWORD userLen = MAX_PATH;
2134 
2135  strcpyW(szDest, szProfilesPrefix);
2136  GetUserNameW(userName, &userLen);
2137  PathAppendW(szDest, userName);
2138 #else
2139  DWORD cchSize = cchDest;
2140  if (!_SHGetUserProfileDirectoryW(hToken, szDest, &cchSize))
2141  goto fallback_expand;
2142 #endif
2143  PathAppendW(szDest, szTemp + strlenW(UserProfileW));
2144  }
2145  else if (!strncmpiW(szTemp, SystemDriveW, strlenW(SystemDriveW)))
2146  {
2147 #ifndef __REACTOS__
2148  GetSystemDirectoryW(szDest, MAX_PATH);
2149 #else
2150  if (!GetSystemDirectoryW(szDest, cchDest))
2151  goto fallback_expand;
2152 #endif
2153  strcpyW(szDest + 3, szTemp + strlenW(SystemDriveW) + 1);
2154  }
2155  else
2156 #ifdef __REACTOS__
2157 fallback_expand:
2158 #endif
2159  {
2160 #ifndef __REACTOS__
2161  DWORD ret = ExpandEnvironmentStringsW(szTemp, szDest, MAX_PATH);
2162 #else
2163  DWORD ret = SHExpandEnvironmentStringsForUserW(hToken, szTemp, szDest, cchDest);
2164 #endif
2165 
2166 #ifndef __REACTOS__
2167  if (ret > MAX_PATH)
2168 #else
2169  if (ret > cchDest)
2170 #endif
2172  else if (ret == 0)
2174  else if (!strcmpW( szTemp, szDest )) break; /* nothing expanded */
2175  }
2176  if (SUCCEEDED(hr)) strcpyW(szTemp, szDest);
2177  }
2178 end:
2179 #ifndef __REACTOS__
2180  if (key)
2181  RegCloseKey(key);
2182 #endif
2183  TRACE("returning 0x%08x (input was %s, output is %s)\n", hr,
2184  debugstr_w(szSrc), debugstr_w(szDest));
2185  return hr;
2186 }
static const WCHAR PublicProfileW[]
Definition: shellpath.c:679
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
static const WCHAR UserProfileW[]
Definition: shellpath.c:681
HRESULT hr
Definition: shlfolder.c:183
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
GLuint GLuint end
Definition: gl.h:1545
static const WCHAR ProfilesDirectoryW[]
Definition: shellpath.c:685
#define strncmpiW(s1, s2, n)
Definition: unicode.h:40
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:121
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
static const WCHAR PublicW[]
Definition: shellpath.c:653
BOOL _SHGetUserProfileDirectoryW(HANDLE hToken, LPWSTR szPath, LPDWORD lpcchPath)
Definition: shellpath.c:1600
#define debugstr_w
Definition: kernel32.h:32
static const WCHAR AllUsersProfileW[]
Definition: shellpath.c:677
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR UsersPublicW[]
Definition: shellpath.c:672
static HRESULT _SHOpenProfilesKey(PHKEY pKey)
Definition: shellpath.c:1990
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
Definition: misc.c:291
#define TRACE(s)
Definition: solgame.cpp:4
static const WCHAR szAllUsers[]
Definition: msipriv.h:1138
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
static const WCHAR SystemDriveW[]
Definition: shellpath.c:682
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:2345
#define S_OK
Definition: intsafe.h:59
static const WCHAR szDefaultProfileDirW[]
Definition: shellpath.c:690
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
BOOL WINAPI GetAllUsersProfileDirectoryW(_Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
Definition: profile.c:1310
static const WCHAR AllUsersW[]
Definition: shellpath.c:695
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2312
static HRESULT _SHGetProfilesValue(HKEY profilesKey, LPCWSTR szValueName, LPWSTR szValue, LPCWSTR szDefault)
Definition: shellpath.c:2005
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
static const WCHAR userName[]
Definition: wnet.c:2154
static const WCHAR AllUsersProfileValueW[]
Definition: shellpath.c:686
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
Definition: unicode.h:229
#define SUCCEEDED(hr)
Definition: intsafe.h:57
Definition: path.c:41

Referenced by _SHGetUserShellFolderPath(), and SHGetFolderPathAndSubDirW().

◆ _SHGetAllUsersProfilePath()

static HRESULT _SHGetAllUsersProfilePath ( DWORD  dwFlags,
BYTE  folder,
LPWSTR  pszPath 
)
static

Definition at line 1950 of file shellpath.c.

1952 {
1953  HRESULT hr;
1954 
1955  TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath);
1956 
1957  if (folder >= ARRAY_SIZE(CSIDL_Data))
1958  return E_INVALIDARG;
1960  return E_INVALIDARG;
1961  if (!pszPath)
1962  return E_INVALIDARG;
1963 
1965 #ifndef __REACTOS__
1966  hr = _SHGetDefaultValue(folder, pszPath);
1967 #else
1968  hr = _SHGetDefaultValue(NULL, folder, pszPath);
1969 #endif
1970  else
1971  {
1972 #ifndef __REACTOS__
1974 #else
1976 #endif
1977  CSIDL_Data[folder].szValueName, pszPath);
1978  if (FAILED(hr))
1979 #ifndef __REACTOS__
1980  hr = _SHGetDefaultValue(folder, pszPath);
1981 #else
1982  hr = _SHGetDefaultValue(NULL, folder, pszPath);
1983 #endif
1984  }
1985  TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
1986  return hr;
1987 }
Definition: fci.c:115
HRESULT hr
Definition: shlfolder.c:183
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:730
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define debugstr_w
Definition: kernel32.h:32
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:78
static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1636
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define ARRAY_SIZE(a)
Definition: main.h:24
static HRESULT _SHGetUserShellFolderPath(HKEY rootKey, LPCWSTR userPrefix, LPCWSTR value, LPWSTR path)
Definition: shellpath.c:1517
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by _SHRegisterFolders(), and SHGetFolderPathAndSubDirW().

◆ _SHGetCurrentVersionPath()

static HRESULT _SHGetCurrentVersionPath ( DWORD  dwFlags,
BYTE  folder,
LPWSTR  pszPath 
)
static

Definition at line 1752 of file shellpath.c.

1754 {
1755  HRESULT hr;
1756 
1757  TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath);
1758 
1759  if (folder >= ARRAY_SIZE(CSIDL_Data))
1760  return E_INVALIDARG;
1762  return E_INVALIDARG;
1763  if (!pszPath)
1764  return E_INVALIDARG;
1765 
1767 #ifndef __REACTOS__
1768  hr = _SHGetDefaultValue(folder, pszPath);
1769 #else
1770  hr = _SHGetDefaultValue(NULL, folder, pszPath);
1771 #endif
1772  else
1773  {
1774  HKEY hKey;
1775 
1777  hr = E_FAIL;
1778  else
1779  {
1780  DWORD dwType, dwPathLen = MAX_PATH * sizeof(WCHAR);
1781 
1782  if (RegQueryValueExW(hKey, CSIDL_Data[folder].szValueName, NULL,
1783  &dwType, (LPBYTE)pszPath, &dwPathLen) ||
1784  (dwType != REG_SZ && dwType != REG_EXPAND_SZ))
1785  {
1786 #ifndef __REACTOS__
1787  hr = _SHGetDefaultValue(folder, pszPath);
1788 #else
1789  hr = _SHGetDefaultValue(NULL, folder, pszPath);
1790 #endif
1791  dwType = REG_EXPAND_SZ;
1792  switch (folder)
1793  {
1796  /* these two should never be set on 32-bit setups */
1797  if (!is_win64)
1798  {
1799  BOOL is_wow64;
1801  if (!is_wow64) break;
1802  }
1803  /* fall through */
1804  default:
1805  RegSetValueExW(hKey, CSIDL_Data[folder].szValueName, 0, dwType,
1806  (LPBYTE)pszPath, (strlenW(pszPath)+1)*sizeof(WCHAR));
1807  }
1808  }
1809  else
1810  {
1811  pszPath[dwPathLen / sizeof(WCHAR)] = '\0';
1812  hr = S_OK;
1813  }
1814  RegCloseKey(hKey);
1815  }
1816  }
1817  TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
1818  return hr;
1819 }
Definition: fci.c:115
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
HRESULT hr
Definition: shlfolder.c:183
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:730
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static const WCHAR szCurrentVersion[]
Definition: shellpath.c:577
#define E_FAIL
Definition: ddrawi.h:102
#define CSIDL_PROGRAM_FILESX86
Definition: shlobj.h:2053
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:53
unsigned int BOOL
Definition: ntddk_ex.h:94
#define debugstr_w
Definition: kernel32.h:32
#define E_INVALIDARG
Definition: ddrawi.h:101
static const BOOL is_win64
Definition: shellpath.c:55
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI IsWow64Process(IN HANDLE hProcess, OUT PBOOL Wow64Process)
Definition: proc.c:1976
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
#define TRACE(s)
Definition: solgame.cpp:4
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1138
static BOOL is_wow64
Definition: loader.c:55
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1636
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1199
#define CSIDL_PROGRAM_FILES_COMMONX86
Definition: shlobj.h:2055
#define S_OK
Definition: intsafe.h:59
#define ARRAY_SIZE(a)
Definition: main.h:24
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define REG_SZ
Definition: layer.c:22

Referenced by SHGetFolderPathAndSubDirW().

◆ _SHGetDefaultValue()

static HRESULT _SHGetDefaultValue ( BYTE  folder,
LPWSTR  pszPath 
)
static

Definition at line 1636 of file shellpath.c.

1640 {
1641  HRESULT hr;
1642  WCHAR resourcePath[MAX_PATH];
1643 #ifdef __REACTOS__
1644  NT_PRODUCT_TYPE ProductType;
1645 #endif
1646 
1647  TRACE("0x%02x,%p\n", folder, pszPath);
1648 
1649  if (folder >= ARRAY_SIZE(CSIDL_Data))
1650  return E_INVALIDARG;
1651 
1652  if (!pszPath)
1653  return E_INVALIDARG;
1654 
1655 #ifdef __REACTOS__
1656  if (hToken != NULL && hToken != (HANDLE)-1)
1657  {
1658  FIXME("unsupported for user other than current or default\n");
1659  }
1660 #endif
1661 
1662  if (!is_win64)
1663  {
1664  BOOL is_wow64;
1665 
1666  switch (folder)
1667  {
1668  case CSIDL_PROGRAM_FILES:
1672  break;
1677  break;
1678  }
1679  }
1680 
1681  switch (CSIDL_Data[folder].type)
1682  {
1683  case CSIDL_Type_User:
1684  strcpyW(pszPath, UserProfileW);
1685  break;
1686 #ifdef __REACTOS__
1687  case CSIDL_Type_InMyDocuments:
1688  strcpyW(pszPath, UserProfileW);
1689  if (DoGetProductType(&ProductType) && ProductType == NtProductWinNt)
1690  {
1691  if (IS_INTRESOURCE(CSIDL_Data[CSIDL_MYDOCUMENTS].szDefaultPath))
1692  {
1693  WCHAR szItem[MAX_PATH];
1695  LOWORD(CSIDL_Data[CSIDL_MYDOCUMENTS].szDefaultPath),
1696  szItem, ARRAY_SIZE(szItem));
1697  PathAppendW(pszPath, szItem);
1698  }
1699  else
1700  {
1701  PathAppendW(pszPath, CSIDL_Data[CSIDL_MYDOCUMENTS].szDefaultPath);
1702  }
1703  }
1704  break;
1705 #endif
1706  case CSIDL_Type_AllUsers:
1707 #ifndef __REACTOS__
1708  strcpyW(pszPath, PublicProfileW);
1709 #else
1710  strcpyW(pszPath, AllUsersProfileW);
1711 #endif
1712  break;
1713  case CSIDL_Type_CurrVer:
1714  strcpyW(pszPath, SystemDriveW);
1715  break;
1716  default:
1717  ; /* no corresponding env. var, do nothing */
1718  }
1719 
1720  hr = S_OK;
1721  if (CSIDL_Data[folder].szDefaultPath)
1722  {
1723  if (IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath))
1724  {
1726  LOWORD(CSIDL_Data[folder].szDefaultPath), resourcePath, MAX_PATH))
1727  {
1728  PathAppendW(pszPath, resourcePath);
1729  }
1730  else
1731  {
1732  ERR("(%d,%s), LoadString failed, missing translation?\n", folder,
1733  debugstr_w(pszPath));
1734  hr = E_FAIL;
1735  }
1736  }
1737  else
1738  {
1739  PathAppendW(pszPath, CSIDL_Data[folder].szDefaultPath);
1740  }
1741  }
1742  TRACE("returning 0x%08x\n", hr);
1743  return hr;
1744 }
static const WCHAR PublicProfileW[]
Definition: shellpath.c:679
Definition: fci.c:115
static const WCHAR UserProfileW[]
Definition: shellpath.c:681
HRESULT hr
Definition: shlfolder.c:183
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:730
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define CSIDL_PROGRAM_FILES
Definition: shlobj.h:2049
#define E_FAIL
Definition: ddrawi.h:102
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:121
#define CSIDL_PROGRAM_FILESX86
Definition: shlobj.h:2053
#define CSIDL_MYDOCUMENTS
Definition: shlobj.h:2024
HINSTANCE shell32_hInstance
Definition: misc.cpp:82
unsigned int BOOL
Definition: ntddk_ex.h:94
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
static const WCHAR AllUsersProfileW[]
Definition: shellpath.c:677
#define E_INVALIDARG
Definition: ddrawi.h:101
static const BOOL is_win64
Definition: shellpath.c:55
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI IsWow64Process(IN HANDLE hProcess, OUT PBOOL Wow64Process)
Definition: proc.c:1976
#define TRACE(s)
Definition: solgame.cpp:4
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
static const WCHAR SystemDriveW[]
Definition: shellpath.c:682
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1138
static BOOL is_wow64
Definition: loader.c:55
#define MAX_PATH
Definition: compat.h:26
#define CSIDL_PROGRAM_FILES_COMMONX86
Definition: shlobj.h:2055
#define CSIDL_PROGRAM_FILES_COMMON
Definition: shlobj.h:2054
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:59
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
#define ARRAY_SIZE(a)
Definition: main.h:24
enum _NT_PRODUCT_TYPE NT_PRODUCT_TYPE
#define LOWORD(l)
Definition: pedump.c:82

Referenced by _SHGetAllUsersProfilePath(), _SHGetCurrentVersionPath(), and _SHGetUserProfilePath().

◆ _SHGetProfilesValue()

static HRESULT _SHGetProfilesValue ( HKEY  profilesKey,
LPCWSTR  szValueName,
LPWSTR  szValue,
LPCWSTR  szDefault 
)
static

Definition at line 2005 of file shellpath.c.

2007 {
2008  HRESULT hr;
2009  DWORD type, dwPathLen = MAX_PATH * sizeof(WCHAR);
2010  LONG lRet;
2011 
2012  TRACE("%p,%s,%p,%s\n", profilesKey, debugstr_w(szValueName), szValue,
2013  debugstr_w(szDefault));
2014  lRet = RegQueryValueExW(profilesKey, szValueName, NULL, &type,
2015  (LPBYTE)szValue, &dwPathLen);
2016  if (!lRet && (type == REG_SZ || type == REG_EXPAND_SZ) && dwPathLen
2017  && *szValue)
2018  {
2019  dwPathLen /= sizeof(WCHAR);
2020  szValue[dwPathLen] = '\0';
2021  hr = S_OK;
2022  }
2023  else
2024  {
2025  /* Missing or invalid value, set a default */
2026  lstrcpynW(szValue, szDefault, MAX_PATH);
2027  TRACE("Setting missing value %s to %s\n", debugstr_w(szValueName),
2028  debugstr_w(szValue));
2029  lRet = RegSetValueExW(profilesKey, szValueName, 0, REG_EXPAND_SZ,
2030  (LPBYTE)szValue,
2031  (strlenW(szValue) + 1) * sizeof(WCHAR));
2032  if (lRet)
2033  hr = HRESULT_FROM_WIN32(lRet);
2034  else
2035  hr = S_OK;
2036  }
2037  TRACE("returning 0x%08x (output value is %s)\n", hr, debugstr_w(szValue));
2038  return hr;
2039 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
HRESULT hr
Definition: shlfolder.c:183
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define lstrcpynW
Definition: compat.h:406
unsigned char * LPBYTE
Definition: typedefs.h:53
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
#define TRACE(s)
Definition: solgame.cpp:4
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:59
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define REG_SZ
Definition: layer.c:22

Referenced by _SHExpandEnvironmentStrings().

◆ _SHGetUserProfileDirectoryW()

BOOL _SHGetUserProfileDirectoryW ( HANDLE  hToken,
LPWSTR  szPath,
LPDWORD  lpcchPath 
)

Definition at line 1600 of file shellpath.c.

1601 {
1602  BOOL result;
1603  if (!hToken)
1604  {
1606  result = GetUserProfileDirectoryW(hToken, szPath, lpcchPath);
1607  CloseHandle(hToken);
1608  }
1609  else if ((INT) hToken == -1)
1610  {
1612  }
1613  else
1614  {
1615  result = GetUserProfileDirectoryW(hToken, szPath, lpcchPath);
1616  }
1617  TRACE("_SHGetUserProfileDirectoryW returning %S\n", szPath);
1618  return result;
1619 }
BOOL WINAPI GetDefaultUserProfileDirectoryW(_Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
Definition: profile.c:1443
#define CloseHandle
Definition: compat.h:407
BOOL WINAPI GetUserProfileDirectoryW(_In_ HANDLE hToken, _Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
Definition: profile.c:1792
int32_t INT
Definition: typedefs.h:57
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
#define TOKEN_QUERY
Definition: setypes.h:874
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1138
LPCWSTR szPath
Definition: env.c:35
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:296
GLuint64EXT * result
Definition: glext.h:11304

Referenced by _SHExpandEnvironmentStrings().

◆ _SHGetUserProfilePath()

static HRESULT _SHGetUserProfilePath ( HANDLE  hToken,
DWORD  dwFlags,
BYTE  folder,
LPWSTR  pszPath 
)
static

Definition at line 1862 of file shellpath.c.

1864 {
1865  const WCHAR *szValueName;
1866  WCHAR buffer[40];
1867  HRESULT hr;
1868 
1869  TRACE("%p,0x%08x,0x%02x,%p\n", hToken, dwFlags, folder, pszPath);
1870 
1871  if (folder >= ARRAY_SIZE(CSIDL_Data))
1872  return E_INVALIDARG;
1873 #ifdef __REACTOS__
1875  CSIDL_Data[folder].type != CSIDL_Type_InMyDocuments)
1876 #else
1878 #endif
1879  {
1880  return E_INVALIDARG;
1881  }
1882  if (!pszPath)
1883  return E_INVALIDARG;
1884 
1886  {
1887 #ifndef __REACTOS__
1888  hr = _SHGetDefaultValue(folder, pszPath);
1889 #else
1890  hr = _SHGetDefaultValue(hToken, folder, pszPath);
1891 #endif
1892  }
1893  else
1894  {
1895  LPCWSTR userPrefix = NULL;
1896  HKEY hRootKey;
1897 
1898  if (hToken == (HANDLE)-1)
1899  {
1900  hRootKey = HKEY_USERS;
1901  userPrefix = DefaultW;
1902  }
1903  else if (hToken == NULL)
1904  hRootKey = HKEY_CURRENT_USER;
1905  else
1906  {
1907  hRootKey = HKEY_USERS;
1908  userPrefix = _GetUserSidStringFromToken(hToken);
1909  if (userPrefix == NULL)
1910  {
1911  hr = E_FAIL;
1912  goto error;
1913  }
1914  }
1915 
1916  /* For CSIDL_Type_User we also use the GUID if no szValueName is provided */
1917  szValueName = CSIDL_Data[folder].szValueName;
1918  if (!szValueName)
1919  {
1921  szValueName = &buffer[0];
1922  }
1923 
1924 #ifndef __REACTOS__
1925  hr = _SHGetUserShellFolderPath(hRootKey, userPrefix, szValueName, pszPath);
1926  if (FAILED(hr) && hRootKey != HKEY_LOCAL_MACHINE)
1927  hr = _SHGetUserShellFolderPath(HKEY_LOCAL_MACHINE, NULL, szValueName, pszPath);
1928  if (FAILED(hr))
1929  hr = _SHGetDefaultValue(folder, pszPath);
1930 #else
1931  hr = _SHGetUserShellFolderPath(hRootKey, hToken, userPrefix, szValueName, pszPath);
1932  if (FAILED(hr) && hRootKey != HKEY_LOCAL_MACHINE)
1933  hr = _SHGetUserShellFolderPath(HKEY_LOCAL_MACHINE, hToken, NULL, szValueName, pszPath);
1934  if (FAILED(hr))
1935  hr = _SHGetDefaultValue(hToken, folder, pszPath);
1936 #endif
1937  if (userPrefix != NULL && userPrefix != DefaultW)
1938  LocalFree((HLOCAL) userPrefix);
1939  }
1940 error:
1941  TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
1942  return hr;
1943 }
#define HKEY_USERS
Definition: winreg.h:13
Definition: fci.c:115
HRESULT hr
Definition: shlfolder.c:183
#define error(str)
Definition: mkdosfs.c:1605
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define HKEY_CURRENT_USER
Definition: winreg.h:11
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:730
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
#define E_FAIL
Definition: ddrawi.h:102
#define debugstr_w
Definition: kernel32.h:32
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
struct CFFOLDER folder
Definition: fdi.c:102
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1636
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define ARRAY_SIZE(a)
Definition: main.h:24
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
static LPWSTR _GetUserSidStringFromToken(HANDLE Token)
Definition: shellpath.c:1821
LPCWSTR szValueName
Definition: shellpath.c:725
static HRESULT _SHGetUserShellFolderPath(HKEY rootKey, LPCWSTR userPrefix, LPCWSTR value, LPWSTR path)
Definition: shellpath.c:1517
static const WCHAR DefaultW[]
Definition: shellpath.c:676
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by _SHRegisterFolders(), and SHGetFolderPathAndSubDirW().

◆ _SHGetUserShellFolderPath()

static HRESULT _SHGetUserShellFolderPath ( HKEY  rootKey,
LPCWSTR  userPrefix,
LPCWSTR  value,
LPWSTR  path 
)
static

Definition at line 1517 of file shellpath.c.

1522 {
1523  HRESULT hr;
1524  WCHAR shellFolderPath[MAX_PATH], userShellFolderPath[MAX_PATH];
1525  LPCWSTR pShellFolderPath, pUserShellFolderPath;
1526  HKEY userShellFolderKey, shellFolderKey;
1527  DWORD dwType, dwPathLen;
1528 
1529  TRACE("%p,%s,%s,%p\n",rootKey, debugstr_w(userPrefix), debugstr_w(value),
1530  path);
1531 
1532  if (userPrefix)
1533  {
1534  strcpyW(shellFolderPath, userPrefix);
1535  PathAddBackslashW(shellFolderPath);
1536  strcatW(shellFolderPath, szSHFolders);
1537  pShellFolderPath = shellFolderPath;
1538  strcpyW(userShellFolderPath, userPrefix);
1539  PathAddBackslashW(userShellFolderPath);
1540  strcatW(userShellFolderPath, szSHUserFolders);
1541  pUserShellFolderPath = userShellFolderPath;
1542  }
1543  else
1544  {
1545  pUserShellFolderPath = szSHUserFolders;
1546  pShellFolderPath = szSHFolders;
1547  }
1548 
1549  if (RegCreateKeyW(rootKey, pShellFolderPath, &shellFolderKey))
1550  {
1551  TRACE("Failed to create %s\n", debugstr_w(pShellFolderPath));
1552  return E_FAIL;
1553  }
1554  if (RegCreateKeyW(rootKey, pUserShellFolderPath, &userShellFolderKey))
1555  {
1556  TRACE("Failed to create %s\n",
1557  debugstr_w(pUserShellFolderPath));
1558  RegCloseKey(shellFolderKey);
1559  return E_FAIL;
1560  }
1561 
1562  dwPathLen = MAX_PATH * sizeof(WCHAR);
1563  if (!RegQueryValueExW(userShellFolderKey, value, NULL, &dwType,
1564  (LPBYTE)path, &dwPathLen) && (dwType == REG_EXPAND_SZ || dwType == REG_SZ))
1565  {
1566  LONG ret;
1567 
1568  path[dwPathLen / sizeof(WCHAR)] = '\0';
1569  if (dwType == REG_EXPAND_SZ && path[0] == '%')
1570  {
1571  WCHAR szTemp[MAX_PATH];
1572 
1573 #ifndef __REACTOS__
1575 #else
1576  hr = _SHExpandEnvironmentStrings(hToken, path, szTemp, _countof(szTemp));
1577  if (FAILED(hr))
1578  goto end;
1579 #endif
1580  lstrcpynW(path, szTemp, MAX_PATH);
1581  }
1582  ret = RegSetValueExW(shellFolderKey, value, 0, REG_SZ, (LPBYTE)path,
1583  (strlenW(path) + 1) * sizeof(WCHAR));
1584  if (ret != ERROR_SUCCESS)
1586  else
1587  hr = S_OK;
1588  }
1589  else
1590  hr = E_FAIL;
1591 #ifdef __REACTOS__
1592 end:
1593 #endif
1594  RegCloseKey(shellFolderKey);
1595  RegCloseKey(userShellFolderKey);
1596  TRACE("returning 0x%08x\n", hr);
1597  return hr;
1598 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define ERROR_SUCCESS
Definition: deptool.c:10
HRESULT hr
Definition: shlfolder.c:183
static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest)
Definition: shellpath.c:2055
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
GLuint GLuint end
Definition: gl.h:1545
#define E_FAIL
Definition: ddrawi.h:102
#define lstrcpynW
Definition: compat.h:406
static const WCHAR szSHUserFolders[]
Definition: shellpath.c:689
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:53
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:289
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
#define TRACE(s)
Definition: solgame.cpp:4
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1199
#define S_OK
Definition: intsafe.h:59
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:242
static const WCHAR szSHFolders[]
Definition: shellpath.c:688
#define REG_SZ
Definition: layer.c:22

Referenced by _SHGetAllUsersProfilePath(), and _SHGetUserProfilePath().

◆ _SHOpenProfilesKey()

static HRESULT _SHOpenProfilesKey ( PHKEY  pKey)
static

Definition at line 1990 of file shellpath.c.

1991 {
1992  LONG lRet;
1993  DWORD disp;
1994 
1996  KEY_ALL_ACCESS, NULL, pKey, &disp);
1997  return HRESULT_FROM_WIN32(lRet);
1998 }
disp
Definition: i386-dis.c:3181
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
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)
Definition: reg.c:1091
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
unsigned long DWORD
Definition: ntddk_ex.h:95
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
static const WCHAR ProfileListW[]
Definition: shellpath.c:684
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by _SHExpandEnvironmentStrings().

◆ _SHRegisterCommonShellFolders()

static HRESULT _SHRegisterCommonShellFolders ( void  )
static

Definition at line 2653 of file shellpath.c.

2654 {
2655  static const UINT folders[] = {
2668  };
2669  HRESULT hr;
2670 
2671  TRACE("\n");
2673  szSHFolders, folders, ARRAY_SIZE(folders));
2674  TRACE("returning 0x%08x\n", hr);
2675  return hr;
2676 }
HRESULT hr
Definition: shlfolder.c:183
#define CSIDL_COMMON_DESKTOPDIRECTORY
Definition: shlobj.h:2036
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2042
static HRESULT _SHRegisterFolders(HKEY hRootKey, HANDLE hToken, LPCWSTR szUserShellFolderPath, LPCWSTR szShellFolderPath, const UINT folders[], UINT foldersLen)
Definition: shellpath.c:2483
#define CSIDL_COMMON_STARTUP
Definition: shlobj.h:2035
#define CSIDL_COMMON_PICTURES
Definition: shlobj.h:2062
#define CSIDL_COMMON_TEMPLATES
Definition: shlobj.h:2056
static const WCHAR szSHUserFolders[]
Definition: shellpath.c:689
#define CSIDL_COMMON_PROGRAMS
Definition: shlobj.h:2034
smooth NULL
Definition: ftsmooth.c:416
#define CSIDL_COMMON_STARTMENU
Definition: shlobj.h:2033
#define CSIDL_COMMON_ADMINTOOLS
Definition: shlobj.h:2058
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:78
#define CSIDL_COMMON_VIDEO
Definition: shlobj.h:2063
#define CSIDL_COMMON_APPDATA
Definition: shlobj.h:2046
#define CSIDL_COMMON_MUSIC
Definition: shlobj.h:2061
#define ARRAY_SIZE(a)
Definition: main.h:24
#define CSIDL_COMMON_DOCUMENTS
Definition: shlobj.h:2057
unsigned int UINT
Definition: ndis.h:50
static const WCHAR szSHFolders[]
Definition: shellpath.c:688
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by SHELL_RegisterShellFolders().

◆ _SHRegisterFolders()

static HRESULT _SHRegisterFolders ( HKEY  hRootKey,
HANDLE  hToken,
LPCWSTR  szUserShellFolderPath,
LPCWSTR  szShellFolderPath,
const UINT  folders[],
UINT  foldersLen 
)
static

Definition at line 2483 of file shellpath.c.

2486 {
2487  const WCHAR *szValueName;
2488  WCHAR buffer[40];
2489  UINT i;
2490  WCHAR path[MAX_PATH];
2491  HRESULT hr = S_OK;
2492  HKEY hUserKey = NULL, hKey = NULL;
2493  DWORD dwType, dwPathLen;
2494  LONG ret;
2495 
2496  TRACE("%p,%p,%s,%p,%u\n", hRootKey, hToken,
2497  debugstr_w(szUserShellFolderPath), folders, foldersLen);
2498 
2499  ret = RegCreateKeyW(hRootKey, szUserShellFolderPath, &hUserKey);
2500  if (ret)
2502  else
2503  {
2504  ret = RegCreateKeyW(hRootKey, szShellFolderPath, &hKey);
2505  if (ret)
2507  }
2508  for (i = 0; SUCCEEDED(hr) && i < foldersLen; i++)
2509  {
2510  dwPathLen = MAX_PATH * sizeof(WCHAR);
2511 
2512  /* For CSIDL_Type_User we also use the GUID if no szValueName is provided */
2513  szValueName = CSIDL_Data[folders[i]].szValueName;
2514 #ifdef __REACTOS__
2515  if (!szValueName &&
2516  (CSIDL_Data[folders[i]].type == CSIDL_Type_User ||
2517  CSIDL_Data[folders[i]].type == CSIDL_Type_InMyDocuments))
2518 #else
2519  if (!szValueName && CSIDL_Data[folders[i]].type == CSIDL_Type_User)
2520 #endif
2521  {
2522  StringFromGUID2( CSIDL_Data[folders[i]].id, buffer, 39 );
2523  szValueName = &buffer[0];
2524  }
2525 
2526  if (!RegQueryValueExW(hUserKey, szValueName, NULL,
2527  &dwType, (LPBYTE)path, &dwPathLen) &&
2528  (dwType == REG_SZ || dwType == REG_EXPAND_SZ))
2529  {
2530  hr = SHGetFolderPathW(NULL, folders[i] | CSIDL_FLAG_CREATE,
2531  hToken, SHGFP_TYPE_CURRENT, path);
2532  }
2533  else
2534  {
2535  *path = '\0';
2536 #ifdef __REACTOS__
2537  if (CSIDL_Data[folders[i]].type == CSIDL_Type_User ||
2538  CSIDL_Data[folders[i]].type == CSIDL_Type_InMyDocuments)
2539 #else
2540  if (CSIDL_Data[folders[i]].type == CSIDL_Type_User)
2541 #endif
2542  _SHGetUserProfilePath(hToken, SHGFP_TYPE_CURRENT, folders[i],
2543  path);
2544  else if (CSIDL_Data[folders[i]].type == CSIDL_Type_AllUsers)
2546  else if (CSIDL_Data[folders[i]].type == CSIDL_Type_WindowsPath)
2547  {
2549  if (CSIDL_Data[folders[i]].szDefaultPath &&
2550  !IS_INTRESOURCE(CSIDL_Data[folders[i]].szDefaultPath))
2551  {
2553  strcatW(path, CSIDL_Data[folders[i]].szDefaultPath);
2554  }
2555  }
2556  else
2557  hr = E_FAIL;
2558  if (*path)
2559  {
2560  ret = RegSetValueExW(hUserKey, szValueName, 0, REG_EXPAND_SZ,
2561  (LPBYTE)path, (strlenW(path) + 1) * sizeof(WCHAR));
2562  if (ret)
2564  else
2565  {
2566  hr = SHGetFolderPathW(NULL, folders[i] | CSIDL_FLAG_CREATE,
2567  hToken, SHGFP_TYPE_CURRENT, path);
2568  ret = RegSetValueExW(hKey, szValueName, 0, REG_SZ,
2569  (LPBYTE)path, (strlenW(path) + 1) * sizeof(WCHAR));
2570  if (ret)
2572  }
2573  }
2574  }
2575  }
2576  if (hUserKey)
2577  RegCloseKey(hUserKey);
2578  if (hKey)
2579  RegCloseKey(hKey);
2580 
2581  TRACE("returning 0x%08x\n", hr);
2582  return hr;
2583 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
HRESULT hr
Definition: shlfolder.c:183
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:730
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
#define E_FAIL
Definition: ddrawi.h:102
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2351
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
Definition: glfuncs.h:248
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:53
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:289
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
#define TRACE(s)
Definition: solgame.cpp:4
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
static HRESULT _SHGetUserProfilePath(HANDLE hToken, DWORD dwFlags, BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1862
LONG HRESULT
Definition: typedefs.h:78
#define MAX_PATH
Definition: compat.h:26
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
static HRESULT _SHGetAllUsersProfilePath(DWORD dwFlags, BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1950
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1199
#define S_OK
Definition: intsafe.h:59
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:242
unsigned int UINT
Definition: ndis.h:50
#define CSIDL_FLAG_CREATE
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2208
LPCWSTR szValueName
Definition: shellpath.c:725
#define SUCCEEDED(hr)
Definition: intsafe.h:57
#define REG_SZ
Definition: layer.c:22

Referenced by _SHRegisterCommonShellFolders(), and _SHRegisterUserShellFolders().

◆ _SHRegisterUserShellFolders()

static HRESULT _SHRegisterUserShellFolders ( BOOL  bDefault)
static

Definition at line 2585 of file shellpath.c.

2586 {
2587  static const UINT folders[] = {
2591  CSIDL_APPDATA,
2592  CSIDL_STARTUP,
2593  CSIDL_RECENT,
2594  CSIDL_SENDTO,
2596  CSIDL_MYMUSIC,
2597  CSIDL_MYVIDEO,
2599  CSIDL_NETHOOD,
2604  CSIDL_COOKIES,
2605  CSIDL_HISTORY,
2607  CSIDL_FONTS,
2609 /* Cannot use #if _WIN32_WINNT >= 0x0600 because _WIN32_WINNT == 0x0600 here. */
2610 #ifndef __REACTOS__
2613  CSIDL_LINKS,
2617 #endif
2618  };
2619  WCHAR userShellFolderPath[MAX_PATH], shellFolderPath[MAX_PATH];
2620  LPCWSTR pUserShellFolderPath, pShellFolderPath;
2621  HRESULT hr = S_OK;
2622  HKEY hRootKey;
2623  HANDLE hToken;
2624 
2625  TRACE("%s\n", bDefault ? "TRUE" : "FALSE");
2626  if (bDefault)
2627  {
2628  hToken = (HANDLE)-1;
2629  hRootKey = HKEY_USERS;
2630  strcpyW(userShellFolderPath, DefaultW);
2631  PathAddBackslashW(userShellFolderPath);
2632  strcatW(userShellFolderPath, szSHUserFolders);
2633  pUserShellFolderPath = userShellFolderPath;
2634  strcpyW(shellFolderPath, DefaultW);
2635  PathAddBackslashW(shellFolderPath);
2636  strcatW(shellFolderPath, szSHFolders);
2637  pShellFolderPath = shellFolderPath;
2638  }
2639  else
2640  {
2641  hToken = NULL;
2642  hRootKey = HKEY_CURRENT_USER;
2643  pUserShellFolderPath = szSHUserFolders;
2644  pShellFolderPath = szSHFolders;
2645  }
2646 
2647  hr = _SHRegisterFolders(hRootKey, hToken, pUserShellFolderPath,
2648  pShellFolderPath, folders, ARRAY_SIZE(folders));
2649  TRACE("returning 0x%08x\n", hr);
2650  return hr;
2651 }
#define HKEY_USERS
Definition: winreg.h:13
#define CSIDL_COOKIES
Definition: shlobj.h:2044
#define CSIDL_MYVIDEO
Definition: shlobj.h:2026
HRESULT hr
Definition: shlfolder.c:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define CSIDL_MYPICTURES
Definition: shlobj.h:2050
#define CSIDL_CONTACTS
Definition: shellpath.c:713
#define HKEY_CURRENT_USER
Definition: winreg.h:11
static HRESULT _SHRegisterFolders(HKEY hRootKey, HANDLE hToken, LPCWSTR szUserShellFolderPath, LPCWSTR szShellFolderPath, const UINT folders[], UINT foldersLen)
Definition: shellpath.c:2483
#define CSIDL_HISTORY
Definition: shlobj.h:2045
#define CSIDL_FONTS
Definition: shlobj.h:2031
#define CSIDL_INTERNET_CACHE
Definition: shlobj.h:2043
static const WCHAR szSHUserFolders[]
Definition: shellpath.c:689
#define CSIDL_RECENT
Definition: shlobj.h:2020
#define CSIDL_FAVORITES
Definition: shlobj.h:2018
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:289
smooth NULL
Definition: ftsmooth.c:416
#define CSIDL_SEARCHES
Definition: shellpath.c:718
#define TRACE(s)
Definition: solgame.cpp:4
#define CSIDL_ADMINTOOLS
Definition: shlobj.h:2059
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
#define CSIDL_LOCAL_APPDATA
Definition: shlobj.h:2039
#define CSIDL_SENDTO
Definition: shlobj.h:2021
#define CSIDL_APPDATA
Definition: shlobj.h:2037
#define MAX_PATH
Definition: compat.h:26
static HANDLE
Definition: shellpath.c:88
#define CSIDL_STARTUP
Definition: shlobj.h:2019
#define CSIDL_LINKS
Definition: shellpath.c:715
#define CSIDL_APPDATA_LOCALLOW
Definition: shellpath.c:716
#define S_OK
Definition: intsafe.h:59
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
#define CSIDL_DOWNLOADS
Definition: shellpath.c:714
#define ARRAY_SIZE(a)
Definition: main.h:24
#define CSIDL_PRINTHOOD
Definition: shlobj.h:2038
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:242
unsigned int UINT
Definition: ndis.h:50
#define CSIDL_SAVED_GAMES
Definition: shellpath.c:717
#define CSIDL_NETHOOD
Definition: shlobj.h:2030
static const WCHAR szSHFolders[]
Definition: shellpath.c:688
#define CSIDL_PERSONAL
Definition: shlobj.h:2017
#define CSIDL_STARTMENU
Definition: shlobj.h:2023
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2027
#define CSIDL_PROGRAMS
Definition: shlobj.h:2014
#define CSIDL_TEMPLATES
Definition: shlobj.h:2032
static const WCHAR DefaultW[]
Definition: shellpath.c:676
#define CSIDL_MYMUSIC
Definition: shlobj.h:2025

Referenced by SHELL_RegisterShellFolders().

◆ IsLFNDriveA()

BOOL WINAPI IsLFNDriveA ( LPCSTR  lpszPath)

Definition at line 284 of file shellpath.c.

285 {
286  DWORD fnlen;
287 
288  if (!GetVolumeInformationA(lpszPath, NULL, 0, NULL, &fnlen, NULL, NULL, 0))
289  return FALSE;
290  return fnlen > 12;
291 }
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)
Definition: volume.c:32
smooth NULL
Definition: ftsmooth.c:416
unsigned long DWORD
Definition: ntddk_ex.h:95

Referenced by IsLFNDriveAW().

◆ IsLFNDriveAW()

BOOL WINAPI IsLFNDriveAW ( LPCVOID  lpszPath)

Definition at line 308 of file shellpath.c.

309 {
310  if (SHELL_OsIsUnicode())
311  return IsLFNDriveW(lpszPath);
312  return IsLFNDriveA(lpszPath);
313 }
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL WINAPI IsLFNDriveW(LPCWSTR lpszPath)
Definition: shellpath.c:296
BOOL WINAPI IsLFNDriveA(LPCSTR lpszPath)
Definition: shellpath.c:284

◆ IsLFNDriveW()

BOOL WINAPI IsLFNDriveW ( LPCWSTR  lpszPath)

Definition at line 296 of file shellpath.c.

297 {
298  DWORD fnlen;
299 
300  if (!GetVolumeInformationW(lpszPath, NULL, 0, NULL, &fnlen, NULL, NULL, 0))
301  return FALSE;
302  return fnlen > 12;
303 }
smooth NULL
Definition: ftsmooth.c:416
unsigned long DWORD
Definition: ntddk_ex.h:95
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)
Definition: volume.c:226

Referenced by IsLFNDriveAW().

◆ PathAppendAW()

BOOL WINAPI PathAppendAW ( LPVOID  lpszPath1,
LPCVOID  lpszPath2 
)

Definition at line 112 of file shellpath.c.

115 {
116  if (SHELL_OsIsUnicode())
117  return PathAppendW(lpszPath1, lpszPath2);
118  return PathAppendA(lpszPath1, lpszPath2);
119 }
BOOL WINAPI PathAppendA(LPSTR lpszPath, LPCSTR lpszAppend)
Definition: path.c:101
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:121

◆ PathCleanupSpec()

int WINAPI PathCleanupSpec ( LPCWSTR  lpszPathW,
LPWSTR  lpszFileW 
)

Definition at line 407 of file shellpath.c.

408 {
409  int i = 0;
410  DWORD rc = 0;
411  int length = 0;
412 
413  if (SHELL_OsIsUnicode())
414  {
415  LPWSTR p = lpszFileW;
416 
417  TRACE("Cleanup %s\n",debugstr_w(lpszFileW));
418 
419  if (lpszPathW)
420  length = strlenW(lpszPathW);
421 
422  while (*p)
423  {
424  int gct = PathGetCharTypeW(*p);
425  if (gct == GCT_INVALID || gct == GCT_WILD || gct == GCT_SEPARATOR)
426  {
427  lpszFileW[i]='-';
428  rc |= PCS_REPLACEDCHAR;
429  }
430  else
431  lpszFileW[i]=*p;
432  i++;
433  p++;
434  if (length + i == MAX_PATH)
435  {
436  rc |= PCS_FATAL | PCS_PATHTOOLONG;
437  break;
438  }
439  }
440  lpszFileW[i]=0;
441  }
442  else
443  {
444  LPSTR lpszFileA = (LPSTR)lpszFileW;
445  LPCSTR lpszPathA = (LPCSTR)lpszPathW;
446  LPSTR p = lpszFileA;
447 
448  TRACE("Cleanup %s\n",debugstr_a(lpszFileA));
449 
450  if (lpszPathA)
451  length = strlen(lpszPathA);
452 
453  while (*p)
454  {
455  int gct = PathGetCharTypeA(*p);
456  if (gct == GCT_INVALID || gct == GCT_WILD || gct == GCT_SEPARATOR)
457  {
458  lpszFileA[i]='-';
459  rc |= PCS_REPLACEDCHAR;
460  }
461  else
462  lpszFileA[i]=*p;
463  i++;
464  p++;
465  if (length + i == MAX_PATH)
466  {
467  rc |= PCS_FATAL | PCS_PATHTOOLONG;
468  break;
469  }
470  }
471  lpszFileA[i]=0;
472  }
473  return rc;
474 }
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
UINT WINAPI PathGetCharTypeW(WCHAR ch)
Definition: path.c:3015
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
static LPSTR
Definition: shellpath.c:88
char * LPSTR
Definition: xmlstorage.h:182
#define PCS_FATAL
Definition: shlobj.h:331
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
Definition: glfuncs.h:248
#define PCS_PATHTOOLONG
Definition: shlobj.h:335
#define GCT_WILD
Definition: shlwapi.h:778
#define GCT_INVALID
Definition: shlwapi.h:775
#define debugstr_w
Definition: kernel32.h:32
const char * LPCSTR
Definition: xmlstorage.h:183
UINT WINAPI PathGetCharTypeA(UCHAR ch)
Definition: path.c:3005
#define TRACE(s)
Definition: solgame.cpp:4
#define debugstr_a
Definition: kernel32.h:31
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
#define MAX_PATH
Definition: compat.h:26
#define GCT_SEPARATOR
Definition: shlwapi.h:779
unsigned long DWORD
Definition: ntddk_ex.h:95
#define PCS_REPLACEDCHAR
Definition: shlobj.h:332
GLfloat GLfloat p
Definition: glext.h:8902
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ PathFileExistsAW()

BOOL WINAPI PathFileExistsAW ( LPCVOID  lpszPath)

Definition at line 274 of file shellpath.c.

275 {
276  if (SHELL_OsIsUnicode())
277  return PathFileExistsW (lpszPath);
278  return PathFileExistsA (lpszPath);
279 }
BOOL WINAPI PathFileExistsA(LPCSTR lpszPath)
Definition: path.c:1734
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1756

◆ PathGetExtensionA()

static LPSTR PathGetExtensionA ( LPCSTR  lpszPath)
static

Definition at line 128 of file shellpath.c.

129 {
130  TRACE("(%s)\n",lpszPath);
131 
132  lpszPath = PathFindExtensionA(lpszPath);
133  return (LPSTR)(*lpszPath?(lpszPath+1):lpszPath);
134 }
char * LPSTR
Definition: xmlstorage.h:182
#define TRACE(s)
Definition: solgame.cpp:4
LPSTR WINAPI PathFindExtensionA(LPCSTR lpszPath)
Definition: path.c:417

Referenced by PathIsExeA().

◆ PathGetExtensionW()

static LPWSTR PathGetExtensionW ( LPCWSTR  lpszPath)
static

Definition at line 139 of file shellpath.c.

140 {
141  TRACE("(%s)\n",debugstr_w(lpszPath));
142 
143  lpszPath = PathFindExtensionW(lpszPath);
144  return (LPWSTR)(*lpszPath?(lpszPath+1):lpszPath);
145 }
#define debugstr_w
Definition: kernel32.h:32
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:442
#define TRACE(s)
Definition: solgame.cpp:4
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by PathIsExeW(), and SHPathGetExtensionW().

◆ PathGetShortPathA()

static void PathGetShortPathA ( LPSTR  pszPath)
static

Definition at line 172 of file shellpath.c.

173 {
174  CHAR path[MAX_PATH];
175 
176  TRACE("%s\n", pszPath);
177 
178  if (GetShortPathNameA(pszPath, path, MAX_PATH))
179  {
180  lstrcpyA(pszPath, path);
181  }
182 }
char CHAR
Definition: xmlstorage.h:175
#define TRACE(s)
Definition: solgame.cpp:4
DWORD WINAPI GetShortPathNameA(IN LPCSTR lpszLongPath, OUT LPSTR lpszShortPath, IN DWORD cchBuffer)
Definition: path.c:1751
#define MAX_PATH
Definition: compat.h:26
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:100

Referenced by PathGetShortPathAW().

◆ PathGetShortPathAW()

VOID WINAPI PathGetShortPathAW ( LPVOID  pszPath)

Definition at line 202 of file shellpath.c.

203 {
204  if(SHELL_OsIsUnicode())
205  PathGetShortPathW(pszPath);
206  PathGetShortPathA(pszPath);
207 }
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
static void PathGetShortPathW(LPWSTR pszPath)
Definition: shellpath.c:187
static void PathGetShortPathA(LPSTR pszPath)
Definition: shellpath.c:172

◆ PathGetShortPathW()

static void PathGetShortPathW ( LPWSTR  pszPath)
static

Definition at line 187 of file shellpath.c.

188 {
190 
191  TRACE("%s\n", debugstr_w(pszPath));
192 
193  if (GetShortPathNameW(pszPath, path, MAX_PATH))
194  {
195  lstrcpyW(pszPath, path);
196  }
197 }
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
DWORD WINAPI GetShortPathNameW(IN LPCWSTR lpszLongPath, OUT LPWSTR lpszShortPath, IN DWORD cchBuffer)
Definition: path.c:1832
#define MAX_PATH
Definition: compat.h:26
#define lstrcpyW
Definition: compat.h:415

Referenced by PathGetShortPathAW().

◆ PathIsExeA()

static BOOL PathIsExeA ( LPCSTR  lpszPath)
static

Definition at line 226 of file shellpath.c.

227 {
228  LPCSTR lpszExtension = PathGetExtensionA(lpszPath);
229  int i;
230  static const char * const lpszExtensions[] =
231  {"exe", "com", "pif", "cmd", "bat", "scf", "scr", NULL };
232 
233  TRACE("path=%s\n",lpszPath);
234 
235  for(i=0; lpszExtensions[i]; i++)
236  if (!lstrcmpiA(lpszExtension,lpszExtensions[i])) return TRUE;
237 
238  return FALSE;
239 }
#define TRUE
Definition: types.h:120
int WINAPI lstrcmpiA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:42
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
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
const char * LPCSTR
Definition: xmlstorage.h:183
#define TRACE(s)
Definition: solgame.cpp:4
static LPSTR PathGetExtensionA(LPCSTR lpszPath)
Definition: shellpath.c:128

Referenced by PathIsExeAW().

◆ PathIsExeAW()

BOOL WINAPI PathIsExeAW ( LPCVOID  path)

Definition at line 264 of file shellpath.c.

265 {
266  if (SHELL_OsIsUnicode())
267  return PathIsExeW (path);
268  return PathIsExeA(path);
269 }
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL PathIsExeW(LPCWSTR lpszPath)
Definition: shellpath.c:244
static BOOL PathIsExeA(LPCSTR lpszPath)
Definition: shellpath.c:226

◆ PathIsExeW()

BOOL PathIsExeW ( LPCWSTR  lpszPath)

Definition at line 244 of file shellpath.c.

245 {
246  LPCWSTR lpszExtension = PathGetExtensionW(lpszPath);
247  int i;
248  static const WCHAR lpszExtensions[][4] =
249  {{'e','x','e','\0'}, {'c','o','m','\0'}, {'p','i','f','\0'},
250  {'c','m','d','\0'}, {'b','a','t','\0'}, {'s','c','f','\0'},
251  {'s','c','r','\0'}, {'\0'} };
252 
253  TRACE("path=%s\n",debugstr_w(lpszPath));
254 
255  for(i=0; lpszExtensions[i][0]; i++)
256  if (!strcmpiW(lpszExtension,lpszExtensions[i])) return TRUE;
257 
258  return FALSE;
259 }
#define TRUE
Definition: types.h:120
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
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
Definition: glfuncs.h:248
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define strcmpiW(s1, s2)
Definition: unicode.h:39
static LPWSTR PathGetExtensionW(LPCWSTR lpszPath)
Definition: shellpath.c:139

Referenced by CFileDefExt::InitGeneralPage(), COpenWithMenu::Initialize(), and PathIsExeAW().

◆ PathIsRootAW()

BOOL WINAPI PathIsRootAW ( LPCVOID  lpszPath)

Definition at line 216 of file shellpath.c.

217 {
218  if (SHELL_OsIsUnicode())
219  return PathIsRootW(lpszPath);
220  return PathIsRootA(lpszPath);
221 }
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL WINAPI PathIsRootW(LPCWSTR lpszPath)
Definition: path.c:1621
BOOL WINAPI PathIsRootA(LPCSTR lpszPath)
Definition: path.c:1581

◆ PathMakeUniqueNameA()

static BOOL PathMakeUniqueNameA ( LPSTR  lpszBuffer,
DWORD  dwBuffSize,
LPCSTR  lpszShortName,
LPCSTR  lpszLongName,
LPCSTR  lpszPathName 
)
static

Definition at line 321 of file shellpath.c.

327 {
328  FIXME("%p %u %s %s %s stub\n",
329  lpszBuffer, dwBuffSize, debugstr_a(lpszShortName),
330  debugstr_a(lpszLongName), debugstr_a(lpszPathName));
331  return TRUE;
332 }
#define TRUE
Definition: types.h:120
#define FIXME(fmt,...)
Definition: debug.h:111
#define debugstr_a
Definition: kernel32.h:31

Referenced by PathMakeUniqueNameAW().

◆ PathMakeUniqueNameAW()

BOOL WINAPI PathMakeUniqueNameAW ( LPVOID  lpszBuffer,
DWORD  dwBuffSize,
LPCVOID  lpszShortName,
LPCVOID  lpszLongName,
LPCVOID  lpszPathName 
)

Definition at line 353 of file shellpath.c.

359 {
360  if (SHELL_OsIsUnicode())
361  return PathMakeUniqueNameW(lpszBuffer,dwBuffSize, lpszShortName,lpszLongName,lpszPathName);
362  return PathMakeUniqueNameA(lpszBuffer,dwBuffSize, lpszShortName,lpszLongName,lpszPathName);
363 }
static BOOL PathMakeUniqueNameW(LPWSTR lpszBuffer, DWORD dwBuffSize, LPCWSTR lpszShortName, LPCWSTR lpszLongName, LPCWSTR lpszPathName)
Definition: shellpath.c:337
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
static BOOL PathMakeUniqueNameA(LPSTR lpszBuffer, DWORD dwBuffSize, LPCSTR lpszShortName, LPCSTR lpszLongName, LPCSTR lpszPathName)
Definition: shellpath.c:321

◆ PathMakeUniqueNameW()

static BOOL PathMakeUniqueNameW ( LPWSTR  lpszBuffer,
DWORD  dwBuffSize,
LPCWSTR  lpszShortName,
LPCWSTR  lpszLongName,
LPCWSTR  lpszPathName 
)
static

Definition at line 337 of file shellpath.c.

343 {
344  FIXME("%p %u %s %s %s stub\n",
345  lpszBuffer, dwBuffSize, debugstr_w(lpszShortName),
346  debugstr_w(lpszLongName), debugstr_w(lpszPathName));
347  return TRUE;
348 }
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111

Referenced by PathMakeUniqueNameAW().

◆ PathProcessCommandA()

static LONG PathProcessCommandA ( LPCSTR  lpszPath,
LPSTR  lpszBuff,
DWORD  dwBuffSize,
DWORD  dwFlags 
)
static

Definition at line 530 of file shellpath.c.

535 {
536  FIXME("%s %p 0x%04x 0x%04x stub\n",
537  lpszPath, lpszBuff, dwBuffSize, dwFlags);
538  if(!lpszPath) return -1;
539  if(lpszBuff) strcpy(lpszBuff, lpszPath);
540  return strlen(lpszPath);
541 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define FIXME(fmt,...)
Definition: debug.h:111
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388

Referenced by PathProcessCommandAW().

◆ PathProcessCommandAW()

LONG WINAPI PathProcessCommandAW ( LPCVOID  lpszPath,
LPVOID  lpszBuff,
DWORD  dwBuffSize,
DWORD  dwFlags 
)

Definition at line 562 of file shellpath.c.

567 {
568  if (SHELL_OsIsUnicode())
569  return PathProcessCommandW(lpszPath, lpszBuff, dwBuffSize, dwFlags);
570  return PathProcessCommandA(lpszPath, lpszBuff, dwBuffSize, dwFlags);
571 }
static LONG PathProcessCommandA(LPCSTR lpszPath, LPSTR lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
Definition: shellpath.c:530
static LONG PathProcessCommandW(LPCWSTR lpszPath, LPWSTR lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
Definition: shellpath.c:546
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175

◆ PathProcessCommandW()

static LONG PathProcessCommandW ( LPCWSTR  lpszPath,
LPWSTR  lpszBuff,
DWORD  dwBuffSize,
DWORD  dwFlags 
)
static

Definition at line 546 of file shellpath.c.

551 {
552  FIXME("(%s, %p, 0x%04x, 0x%04x) stub\n",
553  debugstr_w(lpszPath), lpszBuff, dwBuffSize, dwFlags);
554  if(!lpszPath) return -1;
555  if(lpszBuff) strcpyW(lpszBuff, lpszPath);
556  return strlenW(lpszPath);
557 }
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219

Referenced by PathProcessCommandAW().

◆ PathQualifyA()

static BOOL PathQualifyA ( LPCSTR  pszPath)
static

Definition at line 479 of file shellpath.c.

480 {
481  FIXME("%s\n",pszPath);
482  return FALSE;
483 }
#define FIXME(fmt,...)
Definition: debug.h:111

Referenced by PathQualifyAW().

◆ PathQualifyAW()

BOOL WINAPI PathQualifyAW ( LPCVOID  pszPath)

Definition at line 497 of file shellpath.c.

498 {
499  if (SHELL_OsIsUnicode())
500  return PathQualifyW(pszPath);
501  return PathQualifyA(pszPath);
502 }
static BOOL PathQualifyA(LPCSTR pszPath)
Definition: shellpath.c:479
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
static BOOL PathQualifyW(LPCWSTR pszPath)
Definition: shellpath.c:488

◆ PathQualifyW()

static BOOL PathQualifyW ( LPCWSTR  pszPath)
static

Definition at line 488 of file shellpath.c.

489 {
490  FIXME("%s\n",debugstr_w(pszPath));
491  return FALSE;
492 }
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111

Referenced by PathQualifyAW().

◆ PathRemoveFileSpecAW()

BOOL WINAPI PathRemoveFileSpecAW ( LPVOID  lpszPath)

Definition at line 158 of file shellpath.c.

159 {
160  if (SHELL_OsIsUnicode())
161  return PathRemoveFileSpecW(lpszPath);
162  return PathRemoveFileSpecA(lpszPath);
163 }
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:624
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL WINAPI PathRemoveFileSpecA(LPSTR lpszPath)
Definition: path.c:581

◆ PathResolveA()

static BOOL PathResolveA ( LPSTR  path,
LPCSTR paths,
DWORD  flags 
)
static

Definition at line 504 of file shellpath.c.

505 {
506  FIXME("(%s,%p,0x%08x),stub!\n", debugstr_a(path), paths, flags);
507  return FALSE;
508 }
#define FIXME(fmt,...)
Definition: debug.h:111
#define debugstr_a
Definition: kernel32.h:31
GLbitfield flags
Definition: glext.h:7161
GLsizei const GLuint * paths
Definition: glext.h:11717

Referenced by PathResolveAW().

◆ PathResolveAW()

BOOL WINAPI PathResolveAW ( LPVOID  path,
LPCVOID paths,
DWORD  flags 
)

Definition at line 519 of file shellpath.c.

520 {
521  if (SHELL_OsIsUnicode())
522  return PathResolveW(path, (LPCWSTR*)paths, flags);
523  else
524  return PathResolveA(path, (LPCSTR*)paths, flags);
525 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
const char * LPCSTR
Definition: xmlstorage.h:183
static BOOL PathResolveW(LPWSTR path, LPCWSTR *paths, DWORD flags)
Definition: shellpath.c:510
GLbitfield flags
Definition: glext.h:7161
GLsizei const GLuint * paths
Definition: glext.h:11717
static BOOL PathResolveA(LPSTR path, LPCSTR *paths, DWORD flags)
Definition: shellpath.c:504

◆ PathResolveW()

static BOOL PathResolveW ( LPWSTR  path,
LPCWSTR paths,
DWORD  flags 
)
static

Definition at line 510 of file shellpath.c.

511 {
512  FIXME("(%s,%p,0x%08x),stub!\n", debugstr_w(path), paths, flags);
513  return FALSE;
514 }
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
GLbitfield flags
Definition: glext.h:7161
GLsizei const GLuint * paths
Definition: glext.h:11717

Referenced by PathResolveAW().

◆ PathYetAnotherMakeUniqueName()

BOOL WINAPI PathYetAnotherMakeUniqueName ( LPWSTR  buffer,
LPCWSTR  path,
LPCWSTR  shortname,
LPCWSTR  longname 
)

Definition at line 368 of file shellpath.c.

369 {
370  WCHAR pathW[MAX_PATH], retW[MAX_PATH];
371  const WCHAR *file, *ext;
372  int i = 2;
373 
374  TRACE("(%p, %s, %s, %s)\n", buffer, debugstr_w(path), debugstr_w(shortname), debugstr_w(longname));
375 
376  file = longname ? longname : shortname;
377  PathCombineW(pathW, path, file);
378  strcpyW(retW, pathW);
379  PathRemoveExtensionW(pathW);
380 
382 
383  /* now try to make it unique */
384  while (PathFileExistsW(retW))
385  {
386  static const WCHAR fmtW[] = {'%','s',' ','(','%','d',')','%','s',0};
387 
388  sprintfW(retW, fmtW, pathW, i, ext);
389  i++;
390  }
391 
392  strcpyW(buffer, retW);
393  TRACE("ret - %s\n", debugstr_w(buffer));
394 
395  return TRUE;
396 }
#define TRUE
Definition: types.h:120
GLuint buffer
Definition: glext.h:5915
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
Definition: glfuncs.h:248
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:818
#define debugstr_w
Definition: kernel32.h:32
char ext[3]
Definition: mkdosfs.c:358
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1756
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:442
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
const char file[]
Definition: icontest.c:11
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
#define sprintfW
Definition: unicode.h:58
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:189
Definition: fci.c:126

Referenced by BrsFolder_NewFolder(), CNewMenu::CreateNewFolder(), CDefaultContextMenu::DoCreateNewFolder(), loadShell32(), and CNewMenu::NewItemByNonCommand().

◆ SHELL_RegisterShellFolders()

HRESULT SHELL_RegisterShellFolders ( void  )

Definition at line 2681 of file shellpath.c.

2682 {
2683  HRESULT hr;
2684 
2686  if (SUCCEEDED(hr))
2688  if (SUCCEEDED(hr))
2690  return hr;
2691 }
static HRESULT _SHRegisterCommonShellFolders(void)
Definition: shellpath.c:2653
#define TRUE
Definition: types.h:120
HRESULT hr
Definition: shlfolder.c:183
static HRESULT _SHRegisterUserShellFolders(BOOL bDefault)
Definition: shellpath.c:2585
LONG HRESULT
Definition: typedefs.h:78
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by DllRegisterServer().

◆ SHGetFolderLocation()

HRESULT WINAPI SHGetFolderLocation ( HWND  hwndOwner,
int  nFolder,
HANDLE  hToken,
DWORD  dwReserved,
LPITEMIDLIST ppidl 
)

Definition at line 2741 of file shellpath.c.

2747 {
2749 
2750  TRACE("%p 0x%08x %p 0x%08x %p\n",
2751  hwndOwner, nFolder, hToken, dwReserved, ppidl);
2752 
2753  if (!ppidl)
2754  return E_INVALIDARG;
2755  if (dwReserved)
2756  return E_INVALIDARG;
2757 
2758  /* The virtual folders' locations are not user-dependent */
2759  *ppidl = NULL;
2760  switch (nFolder & CSIDL_FOLDER_MASK)
2761  {
2762  case CSIDL_DESKTOP:
2763  *ppidl = _ILCreateDesktop();
2764  break;
2765 
2766  case CSIDL_PERSONAL:
2767  *ppidl = _ILCreateMyDocuments();
2768  break;
2769 
2770  case CSIDL_INTERNET:
2771  *ppidl = _ILCreateIExplore();
2772  break;
2773 
2774  case CSIDL_CONTROLS:
2775  *ppidl = _ILCreateControlPanel();
2776  break;
2777 
2778  case CSIDL_PRINTERS:
2779  *ppidl = _ILCreatePrinters();
2780  break;
2781 
2782  case CSIDL_BITBUCKET:
2783  *ppidl = _ILCreateBitBucket();
2784  break;
2785 
2786  case CSIDL_DRIVES:
2787  *ppidl = _ILCreateMyComputer();
2788  break;
2789 
2790  case CSIDL_NETWORK:
2791  *ppidl = _ILCreateNetwork();
2792  break;
2793 
2794  default:
2795  {
2797 
2798  hr = SHGetFolderPathW(hwndOwner, nFolder, hToken,
2800  if (SUCCEEDED(hr))
2801  {
2802  DWORD attributes=0;
2803 
2804  TRACE("Value=%s\n", debugstr_w(szPath));
2805  hr = SHILCreateFromPathW(szPath, ppidl, &attributes);
2806  }
2808  {
2809  /* unlike SHGetFolderPath, SHGetFolderLocation in shell32
2810  * version 6.0 returns E_FAIL for nonexistent paths
2811  */
2812  hr = E_FAIL;
2813  }
2814  }
2815  }
2816  if(*ppidl)
2817  hr = S_OK;
2818 
2819  TRACE("-- (new pidl %p)\n",*ppidl);
2820  return hr;
2821 }
LPITEMIDLIST _ILCreateDesktop(void)
Definition: pidl.c:1596
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
HRESULT hr
Definition: shlfolder.c:183
LPITEMIDLIST _ILCreatePrinters(void)
Definition: pidl.c:1644
#define CSIDL_DESKTOP
Definition: shlobj.h:2012
_In_ int nFolder
Definition: shlobj.h:1444
#define CSIDL_BITBUCKET
Definition: shlobj.h:2022
#define E_FAIL
Definition: ddrawi.h:102
#define CSIDL_CONTROLS
Definition: shlobj.h:2015
#define CSIDL_FOLDER_MASK
Definition: shlobj.h:2070
#define CSIDL_PRINTERS
Definition: shlobj.h:2016
#define CSIDL_DRIVES
Definition: shlobj.h:2028
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:90
#define debugstr_w
Definition: kernel32.h:32
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
LPITEMIDLIST _ILCreateMyComputer(void)
Definition: pidl.c:1607
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
LPITEMIDLIST _ILCreateNetwork(void)
Definition: pidl.c:1663
#define S_OK
Definition: intsafe.h:59
LPCWSTR szPath
Definition: env.c:35
#define CSIDL_INTERNET
Definition: shlobj.h:2013
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
Definition: pidl.c:392
#define CSIDL_PERSONAL
Definition: shlobj.h:2017
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2208
LPITEMIDLIST _ILCreateIExplore(void)
Definition: pidl.c:1619
LPITEMIDLIST _ILCreateMyDocuments(void)
Definition: pidl.c:1613
LPITEMIDLIST _ILCreateControlPanel(void)
Definition: pidl.c:1625
#define CSIDL_NETWORK
Definition: shlobj.h:2029
LPITEMIDLIST _ILCreateBitBucket(void)
Definition: pidl.c:1669
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by CBandSiteMenu::_CreateBuiltInISFBand(), BrsFolder_OnCreate(), ILIsParentOrSpecialParent(), CExplorerBand::InitializeExplorerBand(), CExplorerBand::InsertSubitems(), LoadRdpSettingsFromFile(), loadShell32(), CShellMenuCallback::OnGetSubMenu(), SaveRdpSettingsToFile(), SHCreateFromDesktop(), SHEmptyRecycleBinW(), SHGetSpecialFolderLocation(), START_TEST(), TestCommandLine(), and TestCompareIDList().

◆ SHGetFolderPathA()

HRESULT WINAPI SHGetFolderPathA ( HWND  hwndOwner,
int  nFolder,
HANDLE  hToken,
DWORD  dwFlags,
LPSTR  pszPath 
)

Definition at line 2453 of file shellpath.c.

2459 {
2460  WCHAR szTemp[MAX_PATH];
2461  HRESULT hr;
2462 
2463  TRACE("%p,%d,%p,%#x,%p\n", hwndOwner, nFolder, hToken, dwFlags, pszPath);
2464 
2465  if (pszPath)
2466  *pszPath = '\0';
2467  hr = SHGetFolderPathW(hwndOwner, nFolder, hToken, dwFlags, szTemp);
2468  if (SUCCEEDED(hr) && pszPath)
2469  WideCharToMultiByte(CP_ACP, 0, szTemp, -1, pszPath, MAX_PATH, NULL,
2470  NULL);
2471 
2472  return hr;
2473 }
#define WideCharToMultiByte
Definition: compat.h:101
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:99
_In_ int nFolder
Definition: shlobj.h:1444
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:78
#define MAX_PATH
Definition: compat.h:26
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2208
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by init_functionpointers(), loadShell32(), SHGetSpecialFolderPathA(), test_profile_items(), test_SHGetFolderPathA(), and test_SHGetFolderPathAndSubDirA().

◆ SHGetFolderPathAndSubDirA()

HRESULT WINAPI SHGetFolderPathAndSubDirA ( HWND  hwndOwner,
int  nFolder,
HANDLE  hToken,
DWORD  dwFlags,
LPCSTR  pszSubPath,
LPSTR  pszPath 
)

Definition at line 2221 of file shellpath.c.

2228 {
2229  int length;
2230  HRESULT hr = S_OK;
2231  LPWSTR pszSubPathW = NULL;
2232  LPWSTR pszPathW = NULL;
2233 
2234  TRACE("%p,%#x,%p,%#x,%s,%p\n", hwndOwner, nFolder, hToken, dwFlags, debugstr_a(pszSubPath), pszPath);
2235 
2236  if(pszPath) {
2237  pszPathW = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
2238  if(!pszPathW) {
2240  goto cleanup;
2241  }
2242  }
2243  TRACE("%08x,%08x,%s\n",nFolder, dwFlags, debugstr_w(pszSubPathW));
2244 
2245  /* SHGetFolderPathAndSubDirW does not distinguish if pszSubPath isn't
2246  * set (null), or an empty string.therefore call it without the parameter set
2247  * if pszSubPath is an empty string
2248  */
2249  if (pszSubPath && pszSubPath[0]) {
2250  length = MultiByteToWideChar(CP_ACP, 0, pszSubPath, -1, NULL, 0);
2251  pszSubPathW = HeapAlloc(GetProcessHeap(), 0, length * sizeof(WCHAR));
2252  if(!pszSubPathW) {
2254  goto cleanup;
2255  }
2256  MultiByteToWideChar(CP_ACP, 0, pszSubPath, -1, pszSubPathW, length);
2257  }
2258 
2259  hr = SHGetFolderPathAndSubDirW(hwndOwner, nFolder, hToken, dwFlags, pszSubPathW, pszPathW);
2260 
2261  if (SUCCEEDED(hr) && pszPath)
2262  WideCharToMultiByte(CP_ACP, 0, pszPathW, -1, pszPath, MAX_PATH, NULL, NULL);
2263 
2264 cleanup:
2265  HeapFree(GetProcessHeap(), 0, pszPathW);
2266  HeapFree(GetProcessHeap(), 0, pszSubPathW);
2267  return hr;
2268 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define WideCharToMultiByte
Definition: compat.h:101
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:99
_In_ int nFolder
Definition: shlobj.h:1444
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:404
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:78
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
#define MAX_PATH
Definition: compat.h:26
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define S_OK
Definition: intsafe.h:59
#define MultiByteToWideChar
Definition: compat.h:100
char * cleanup(char *str)
Definition: wpickclick.c:99
WCHAR * LPWSTR
Definition: xmlstorage.h:184
HRESULT WINAPI SHGetFolderPathAndSubDirW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPCWSTR pszSubPath, LPWSTR pszPath)
Definition: shellpath.c:2273
#define HeapFree(x, y, z)
Definition: compat.h:403
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by test_SHGetFolderPathAndSubDirA().

◆ SHGetFolderPathAndSubDirW()

HRESULT WINAPI SHGetFolderPathAndSubDirW ( HWND  hwndOwner,
int  nFolder,
HANDLE  hToken,
DWORD  dwFlags,
LPCWSTR  pszSubPath,
LPWSTR  pszPath 
)

Definition at line 2273 of file shellpath.c.

2280 {
2281  HRESULT hr;
2282  WCHAR szBuildPath[MAX_PATH], szTemp[MAX_PATH];
2284  CSIDL_Type type;
2285  int ret;
2286 
2287  TRACE("%p,%#x,%p,%#x,%s,%p\n", hwndOwner, nFolder, hToken, dwFlags, debugstr_w(pszSubPath), pszPath);
2288 
2289  /* Windows always NULL-terminates the resulting path regardless of success
2290  * or failure, so do so first
2291  */
2292  if (pszPath)
2293  *pszPath = '\0';
2294 
2295  if (folder >= ARRAY_SIZE(CSIDL_Data))
2296  return E_INVALIDARG;
2298  return E_INVALIDARG;
2299  szTemp[0] = 0;
2301  switch (type)
2302  {
2303  case CSIDL_Type_Disallowed:
2304  hr = E_INVALIDARG;
2305  break;
2307  hr = S_FALSE;
2308  break;
2310  GetWindowsDirectoryW(szTemp, MAX_PATH);
2311  if (CSIDL_Data[folder].szDefaultPath &&
2312  !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) &&
2313  *CSIDL_Data[folder].szDefaultPath)
2314  {
2315  PathAddBackslashW(szTemp);
2316  strcatW(szTemp, CSIDL_Data[folder].szDefaultPath);
2317  }
2318  hr = S_OK;
2319  break;
2320  case CSIDL_Type_SystemPath:
2321  GetSystemDirectoryW(szTemp, MAX_PATH);
2322  if (CSIDL_Data[folder].szDefaultPath &&
2323  !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) &&
2324  *CSIDL_Data[folder].szDefaultPath)
2325  {
2326  PathAddBackslashW(szTemp);
2327  strcatW(szTemp, CSIDL_Data[folder].szDefaultPath);
2328  }
2329  hr = S_OK;
2330  break;
2333  if (CSIDL_Data[folder].szDefaultPath &&
2334  !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) &&
2335  *CSIDL_Data[folder].szDefaultPath)
2336  {
2337  PathAddBackslashW(szTemp);
2338  strcatW(szTemp, CSIDL_Data[folder].szDefaultPath);
2339  }
2340  hr = S_OK;
2341  break;
2342  case CSIDL_Type_CurrVer:
2344  break;
2345  case CSIDL_Type_User:
2346 #ifdef __REACTOS__
2347  case CSIDL_Type_InMyDocuments:
2348 #endif
2349  hr = _SHGetUserProfilePath(hToken, dwFlags, folder, szTemp);
2350  break;
2351  case CSIDL_Type_AllUsers:
2353  break;
2354  default:
2355  FIXME("bogus type %d, please fix\n", type);
2356  hr = E_INVALIDARG;
2357  break;
2358  }
2359 
2360  /* Expand environment strings if necessary */
2361  if (*szTemp == '%')
2362 #ifndef __REACTOS__
2363  hr = _SHExpandEnvironmentStrings(szTemp, szBuildPath);
2364 #else
2365  hr = _SHExpandEnvironmentStrings(hToken, szTemp, szBuildPath, _countof(szBuildPath));
2366 #endif
2367  else
2368  strcpyW(szBuildPath, szTemp);
2369 
2370  if (FAILED(hr)) goto end;
2371 
2372  if(pszSubPath) {
2373  /* make sure the new path does not exceed the buffer length
2374  * and remember to backslash and terminate it */
2375  if(MAX_PATH < (lstrlenW(szBuildPath) + lstrlenW(pszSubPath) + 2)) {
2377  goto end;
2378  }
2379  PathAppendW(szBuildPath, pszSubPath);
2380  PathRemoveBackslashW(szBuildPath);
2381  }
2382  /* Copy the path if it's available before we might return */
2383  if (SUCCEEDED(hr) && pszPath)
2384  strcpyW(pszPath, szBuildPath);
2385 
2386  /* if we don't care about existing directories we are ready */
2387  if(nFolder & CSIDL_FLAG_DONT_VERIFY) goto end;
2388 
2389  if (PathFileExistsW(szBuildPath)) goto end;
2390 
2391  /* not existing but we are not allowed to create it. The return value
2392  * is verified against shell32 version 6.0.
2393  */
2394  if (!(nFolder & CSIDL_FLAG_CREATE))
2395  {
2397  goto end;
2398  }
2399 
2400  /* create directory/directories */
2401  ret = SHCreateDirectoryExW(hwndOwner, szBuildPath, NULL);
2402  if (ret && ret != ERROR_ALREADY_EXISTS)
2403  {
2404  ERR("Failed to create directory %s.\n", debugstr_w(szBuildPath));
2405  hr = E_FAIL;
2406  goto end;
2407  }
2408 
2409  TRACE("Created missing system directory %s\n", debugstr_w(szBuildPath));
2410 
2411 end:
2412  /* create desktop.ini for custom icon */
2413  if ((nFolder & CSIDL_FLAG_CREATE) &&
2414  CSIDL_Data[folder].nShell32IconIndex)
2415  {
2416  static const WCHAR s_szFormat[] = L"%%SystemRoot%%\\system32\\shell32.dll,%d";
2417  WCHAR szIconLocation[MAX_PATH];
2419 
2420  /* make the directory a read-only folder */
2421  dwAttributes = GetFileAttributesW(szBuildPath);
2423  SetFileAttributesW(szBuildPath, dwAttributes);
2424 
2425  /* build the desktop.ini file path */
2426  PathAppendW(szBuildPath, L"desktop.ini");
2427 
2428  /* build the icon location */
2429  StringCchPrintfW(szIconLocation, _countof(szIconLocation), s_szFormat,
2430  CSIDL_Data[folder].nShell32IconIndex);
2431 
2432  /* write desktop.ini */
2433  WritePrivateProfileStringW(L".ShellClassInfo", L"IconResource", szIconLocation, szBuildPath);
2434 
2435  /* flush! */
2436  WritePrivateProfileStringW(NULL, NULL, NULL, szBuildPath);
2437 
2438  /* make the desktop.ini a system and hidden file */
2439  dwAttributes = GetFileAttributesW(szBuildPath);
2441  SetFileAttributesW(szBuildPath, dwAttributes);
2442  }
2443 
2444  TRACE("returning 0x%08x (final path is %s)\n", hr, debugstr_w(szBuildPath));
2445  return hr;
2446 }
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:944
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
Definition: fci.c:115
HRESULT hr
Definition: shlfolder.c:183
static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest)
Definition: shellpath.c:2055
#define CSIDL_FLAG_DONT_VERIFY
Definition: shlobj.h:2073
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
static HRESULT _SHGetCurrentVersionPath(DWORD dwFlags, BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1752
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:730
_In_ int nFolder
Definition: shlobj.h:1444
enum _CSIDL_Type CSIDL_Type
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
#define lstrlenW
Definition: compat.h:416
#define E_FAIL
Definition: ddrawi.h:102
DWORD dwAttributes
Definition: vdmdbg.h:34
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2351
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:121
#define CSIDL_FOLDER_MASK
Definition: shlobj.h:2070
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:289
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:802
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
#define S_FALSE
Definition: winerror.h:2357
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1756
struct CFFOLDER folder
Definition: fdi.c:102
#define TRACE(s)
Definition: solgame.cpp:4
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
__wchar_t WCHAR
Definition: xmlstorage.h:180
static HRESULT _SHGetUserProfilePath(HANDLE hToken, DWORD dwFlags, BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1862
LONG HRESULT
Definition: typedefs.h:78
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:26
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
static HRESULT _SHGetAllUsersProfilePath(DWORD dwFlags, BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1950
static const WCHAR L[]
Definition: oid.c:1250
UINT WINAPI GetSystemWow64DirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2420
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath)
Definition: path.c:862
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
Definition: profile.c:1453
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:59
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
#define ARRAY_SIZE(a)
Definition: main.h:24
int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:846
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:242
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2312
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define CSIDL_FLAG_CREATE
CSIDL_Type type
Definition: shellpath.c:724
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
#define SUCCEEDED(hr)
Definition: intsafe.h:57
#define ERROR_FILENAME_EXCED_RANGE
Definition: winerror.h:263

Referenced by CBandSiteMenu::_GetQLaunchPidl(), CreateShortcuts(), SHGetFolderPathAndSubDirA(), SHGetFolderPathW(), and ThemePageDlgProc().

◆ SHGetFolderPathW()

HRESULT WINAPI SHGetFolderPathW ( HWND  hwndOwner,
int  nFolder,
HANDLE  hToken,
DWORD  dwFlags,
LPWSTR  pszPath 
)

Definition at line 2208 of file shellpath.c.

2214 {
2215  HRESULT hr = SHGetFolderPathAndSubDirW(hwndOwner, nFolder, hToken, dwFlags, NULL, pszPath);
2218  return hr;
2219 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
HRESULT hr
Definition: shlfolder.c:183
_In_ int nFolder
Definition: shlobj.h:1444
smooth NULL
Definition: ftsmooth.c:416
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
LONG HRESULT
Definition: typedefs.h:78
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106
HRESULT WINAPI SHGetFolderPathAndSubDirW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPCWSTR pszSubPath, LPWSTR pszPath)
Definition: shellpath.c:2273

Referenced by _SHRegisterFolders(), AutoStartupApplications(), BrsFolder_NewFolder(), CJournaledTestList::CJournaledTestList(), create_ie_menu(), create_profile_directory(), CreateObjectsFromPersistFolder(), DllRegisterServer(), FILEDLG95_InitControls(), FillDefaultSettings(), format_filelist_filename(), GetDefaultUserSendTo(), CFontExt::Initialize(), LoadThemes(), OnAddStartMenuItems(), OnAdvancedStartMenuItems(), OnBrowseButton(), OnClearRecentItems(), RegisterTypeLibraries(), set_installer_properties(), Settings_GetOutputPath(), SHGetFolderLocation(), SHGetFolderPathA(), SHGetSpecialFolderPathW(), test_namespace(), TestDefaultFormat(), and testRegStoreSavedCerts().

◆ SHGetSpecialFolderLocation()

HRESULT WINAPI SHGetSpecialFolderLocation ( HWND  hwndOwner,
INT  nFolder,
LPITEMIDLIST ppidl 
)

Definition at line 2830 of file shellpath.c.

2834 {
2836 
2837  TRACE("(%p,0x%x,%p)\n", hwndOwner,nFolder,ppidl);
2838 
2839  if (!ppidl)
2840  return E_INVALIDARG;
2841 
2842  hr = SHGetFolderLocation(hwndOwner, nFolder, NULL, 0, ppidl);
2843  return hr;
2844 }
HRESULT hr
Definition: shlfolder.c:183
_In_ int nFolder
Definition: shlobj.h:1444
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:78
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
Definition: shellpath.c:2741

Referenced by _GetDocumentsPidl(), DoTestEntry(), ebrowser_browse_to_desktop(), FILEDLG95_InitControls(), FILEDLG95_LOOKIN_Init(), FILEDLG95_OnWMCommand(), filedlg_collect_places_pidls(), GetFavoritesFolder(), GetMergedFolder(), CSendToMenu::GetSpecialFolder(), IShellBrowserImpl_Construct(), loadShell32(), CDefView::OnCreate(), CShellBrowser::OnOrganizeFavorites(), PidlBrowse(), CAddressEditBox::PopulateComboBox(), RSHELL_CStartMenu_CreateInstance(), SHAddToRecentDocs(), SHCloneSpecialIDList(), SHExplorerParseCmdLine(), SpecialFolderPath::SpecialFolderPath(), START_TEST(), test_ACListISF_FAVORITES(), test_ACListISF_MYCOMPUTER(), test_get_file_info_iconlist(), test_namespace(), test_parameters(), test_printers_folder(), test_SHCreateShellItem(), test_SHCreateShellItemArray(), test_ShellItemBindToHandler(), test_ShellItemGetAttributes(), test_SHGetIDListFromObject(), test_SHGetNameFromIDList(), test_SHGetPathFromIDList(), VariantToIdlist(), and WshCollection_Item().

◆ SHGetSpecialFolderPathA()

BOOL WINAPI SHGetSpecialFolderPathA ( HWND  hwndOwner,
LPSTR  szPath,
int  nFolder,
BOOL  bCreate 
)

Definition at line 2696 of file shellpath.c.

2701 {
2702  return SHGetFolderPathA(hwndOwner, nFolder + (bCreate ? CSIDL_FLAG_CREATE : 0), NULL, 0,
2703  szPath) == S_OK;
2704 }
_In_ int nFolder
Definition: shlobj.h:1444
smooth NULL
Definition: ftsmooth.c:416
#define S_OK
Definition: intsafe.h:59
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1444
HRESULT WINAPI SHGetFolderPathA(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath)
Definition: shellpath.c:2453
LPCWSTR szPath
Definition: env.c:35
#define CSIDL_FLAG_CREATE

Referenced by get_cache_path(), init_strings(), loadShell32(), main(), test_BindToObject(), test_find_file(), and test_GetDisplayName().

◆ SHGetSpecialFolderPathW()

BOOL WINAPI SHGetSpecialFolderPathW ( HWND  hwndOwner,
LPWSTR  szPath,
int  nFolder,
BOOL  bCreate 
)

◆ SHPathGetExtensionW()

LPVOID WINAPI SHPathGetExtensionW ( LPCWSTR  lpszPath,
DWORD  void1,
DWORD  void2 
)

Definition at line 150 of file shellpath.c.

151 {
152  return PathGetExtensionW(lpszPath);
153 }
static LPWSTR PathGetExtensionW(LPCWSTR lpszPath)
Definition: shellpath.c:139

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ Administrative_ToolsW

const WCHAR Administrative_ToolsW[] = {'A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'}
static

Definition at line 578 of file shellpath.c.

◆ AllUsersProfileValueW

const WCHAR AllUsersProfileValueW[] = {'A','l','l','U','s','e','r','s','P','r','o','f','i','l','e','\0'}
static

Definition at line 686 of file shellpath.c.

Referenced by _SHExpandEnvironmentStrings().

◆ AllUsersProfileW

const WCHAR AllUsersProfileW[] = {'%','A','L','L','U','S','E','R','S','P','R','O','F','I','L','E','%','\0'}
static

Definition at line 677 of file shellpath.c.

Referenced by _SHExpandEnvironmentStrings(), and _SHGetDefaultValue().

◆ AllUsersW

const WCHAR AllUsersW[] = {'P','u','b','l','i','c',0}
static

Definition at line 695 of file shellpath.c.

Referenced by _SHExpandEnvironmentStrings().

◆ AppData_LocalLowW

const WCHAR AppData_LocalLowW[] = {'A','p','p','D','a','t','a','\\','L','o','c','a','l','L','o','w','\0'}
static

Definition at line 581 of file shellpath.c.

◆ AppDataW

const WCHAR AppDataW[] = {'A','p','p','D','a','t','a','\0'}
static

Definition at line 579 of file shellpath.c.

◆ Application_DataW

const WCHAR Application_DataW[] = {'A','p','p','l','i','c','a','t','i','o','n',' ','D','a','t','a','\0'}
static

Definition at line 582 of file shellpath.c.

◆ CacheW

const WCHAR CacheW[] = {'C','a','c','h','e','\0'}
static

Definition at line 584 of file shellpath.c.

◆ CD_BurningW

const WCHAR CD_BurningW[] = {'C','D',' ','B','u','r','n','i','n','g','\0'}
static

Definition at line 585 of file shellpath.c.

◆ Common_Administrative_ToolsW

const WCHAR Common_Administrative_ToolsW[] = {'C','o','m','m','o','n',' ','A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'}
static

Definition at line 586 of file shellpath.c.

◆ Common_AppDataW

const WCHAR Common_AppDataW[] = {'C','o','m','m','o','n',' ','A','p','p','D','a','t','a','\0'}
static

Definition at line 587 of file shellpath.c.

◆ Common_DesktopW

const WCHAR Common_DesktopW[] = {'C','o','m','m','o','n',' ','D','e','s','k','t','o','p','\0'}
static

Definition at line 588 of file shellpath.c.

◆ Common_DocumentsW

const WCHAR Common_DocumentsW[] = {'C','o','m','m','o','n',' ','D','o','c','u','m','e','n','t','s','\0'}
static

Definition at line 589 of file shellpath.c.

◆ Common_FavoritesW

const WCHAR Common_FavoritesW[] = {'C','o','m','m','o','n',' ','F','a','v','o','r','i','t','e','s','\0'}
static

Definition at line 590 of file shellpath.c.

◆ Common_ProgramsW

const WCHAR Common_ProgramsW[] = {'C','o','m','m','o','n',' ','P','r','o','g','r','a','m','s','\0'}
static

Definition at line 595 of file shellpath.c.

◆ Common_Start_MenuW

const WCHAR Common_Start_MenuW[] = {'C','o','m','m','o','n',' ','S','t','a','r','t',' ','M','e','n','u','\0'}
static

Definition at line 597 of file shellpath.c.

◆ Common_StartUpW

const WCHAR Common_StartUpW[] = {'C','o','m','m','o','n',' ','S','t','a','r','t','U','p','\0'}
static

Definition at line 596 of file shellpath.c.

◆ Common_TemplatesW

const WCHAR Common_TemplatesW[] = {'C','o','m','m','o','n',' ','T','e','m','p','l','a','t','e','s','\0'}
static

Definition at line 598 of file shellpath.c.

◆ CommonFilesDirW

const WCHAR CommonFilesDirW[] = {'C','o','m','m','o','n','F','i','l','e','s','D','i','r','\0'}
static

Definition at line 591 of file shellpath.c.

◆ CommonFilesDirX86W

const WCHAR CommonFilesDirX86W[] = {'C','o','m','m','o','n','F','i','l','e','s','D','i','r',' ','(','x','8','6',')','\0'}
static

Definition at line 592 of file shellpath.c.

◆ CommonMusicW

const WCHAR CommonMusicW[] = {'C','o','m','m','o','n','M','u','s','i','c','\0'}
static

Definition at line 593 of file shellpath.c.

◆ CommonPicturesW

const WCHAR CommonPicturesW[] = {'C','o','m','m','o','n','P','i','c','t','u','r','e','s','\0'}
static

Definition at line 594 of file shellpath.c.

◆ CommonVideoW

const WCHAR CommonVideoW[] = {'C','o','m','m','o','n','V','i','d','e','o','\0'}
static

Definition at line 599 of file shellpath.c.

◆ ContactsW

const WCHAR ContactsW[] = {'C','o','n','t','a','c','t','s','\0'}
static

Definition at line 601 of file shellpath.c.

◆ CookiesW

const WCHAR CookiesW[] = {'C','o','o','k','i','e','s','\0'}
static

Definition at line 603 of file shellpath.c.

◆ CSIDL_Data

◆ DefaultW

const WCHAR DefaultW[] = {'.','D','e','f','a','u','l','t','\0'}
static

Definition at line 676 of file shellpath.c.

Referenced by _SHGetUserProfilePath(), and _SHRegisterUserShellFolders().

◆ DesktopW

const WCHAR DesktopW[] = {'D','e','s','k','t','o','p','\0'}
static

Definition at line 604 of file shellpath.c.

Referenced by test_getuserobjectinformation().

◆ DocumentsW

const WCHAR DocumentsW[] = {'D','o','c','u','m','e','n','t','s','\0'}
static

Definition at line 606 of file shellpath.c.

◆ DownloadsW

const WCHAR DownloadsW[] = {'D','o','w','n','l','o','a','d','s','\0'}
static

Definition at line 607 of file shellpath.c.

◆ FavoritesW

const WCHAR FavoritesW[] = {'F','a','v','o','r','i','t','e','s','\0'}
static

Definition at line 609 of file shellpath.c.

◆ FontsW

const WCHAR FontsW[] = {'F','o','n','t','s','\0'}
static

Definition at line 610 of file shellpath.c.

◆ HistoryW

const WCHAR HistoryW[] = {'H','i','s','t','o','r','y','\0'}
static

Definition at line 611 of file shellpath.c.

◆ is_win64

const BOOL is_win64 = sizeof(void *) > sizeof(int)
static

Definition at line