ReactOS  0.4.14-dev-554-g2f8d847
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 665 of file shellpath.c.

◆ CSIDL_CONTACTS

#define CSIDL_CONTACTS   0x0043

Definition at line 662 of file shellpath.c.

◆ CSIDL_DOWNLOADS

#define CSIDL_DOWNLOADS   0x0047

Definition at line 663 of file shellpath.c.

◆ CSIDL_LINKS

#define CSIDL_LINKS   0x004d

Definition at line 664 of file shellpath.c.

◆ CSIDL_SAVED_GAMES

#define CSIDL_SAVED_GAMES   0x0062

Definition at line 666 of file shellpath.c.

◆ CSIDL_SEARCHES

#define CSIDL_SEARCHES   0x0063

Definition at line 667 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 649 of file shellpath.c.

Function Documentation

◆ _GetUserSidStringFromToken()

static LPWSTR _GetUserSidStringFromToken ( HANDLE  Token)
static

Definition at line 1707 of file shellpath.c.

1708 {
1709  char InfoBuffer[64];
1710  PTOKEN_USER UserInfo;
1711  DWORD InfoSize;
1712  LPWSTR SidStr;
1713 
1714  UserInfo = (PTOKEN_USER) InfoBuffer;
1715  if (! GetTokenInformation(Token, TokenUser, InfoBuffer, sizeof(InfoBuffer),
1716  &InfoSize))
1717  {
1719  return NULL;
1720  UserInfo = HeapAlloc(GetProcessHeap(), 0, InfoSize);
1721  if (UserInfo == NULL)
1722  return NULL;
1723  if (! GetTokenInformation(Token, TokenUser, UserInfo, InfoSize,
1724  &InfoSize))
1725  {
1726  HeapFree(GetProcessHeap(), 0, UserInfo);
1727  return NULL;
1728  }
1729  }
1730 
1731  if (! ConvertSidToStringSidW(UserInfo->User.Sid, &SidStr))
1732  SidStr = NULL;
1733 
1734  if (UserInfo != (PTOKEN_USER) InfoBuffer)
1735  HeapFree(GetProcessHeap(), 0, UserInfo);
1736 
1737  return SidStr;
1738 }
_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:403
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:402
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by _SHGetUserProfilePath().

◆ _SHExpandEnvironmentStrings()

static HRESULT _SHExpandEnvironmentStrings ( LPCWSTR  szSrc,
LPWSTR  szDest 
)
static

Definition at line 1934 of file shellpath.c.

1938 {
1939  HRESULT hr;
1940 #ifndef __REACTOS__
1941  WCHAR szTemp[MAX_PATH], szProfilesPrefix[MAX_PATH] = { 0 };
1942  HKEY key = NULL;
1943 #else
1944  WCHAR szTemp[MAX_PATH];
1945 #endif
1946 
1947  TRACE("%s, %p\n", debugstr_w(szSrc), szDest);
1948 
1949  if (!szSrc || !szDest) return E_INVALIDARG;
1950 
1951  /* short-circuit if there's nothing to expand */
1952  if (szSrc[0] != '%')
1953  {
1954  strcpyW(szDest, szSrc);
1955  hr = S_OK;
1956  goto end;
1957  }
1958 #ifndef __REACTOS__
1959  /* Get the profile prefix, we'll probably be needing it */
1961  if (SUCCEEDED(hr))
1962  {
1963  WCHAR def_val[MAX_PATH];
1964 
1965  /* get the system drive */
1966  GetSystemDirectoryW(def_val, MAX_PATH);
1967  strcpyW( def_val + 3, szDefaultProfileDirW );
1968 
1969  hr = _SHGetProfilesValue(key, ProfilesDirectoryW, szProfilesPrefix, def_val );
1970  }
1971 #else
1972  hr = S_OK;
1973 #endif
1974 
1975  *szDest = 0;
1976  strcpyW(szTemp, szSrc);
1977  while (SUCCEEDED(hr) && szTemp[0] == '%')
1978  {
1980  {
1981 #ifndef __REACTOS__
1983 
1984  strcpyW(szDest, szProfilesPrefix);
1987  PathAppendW(szDest, szAllUsers);
1988 #else
1989  DWORD cchSize = cchDest;
1990  if (!GetAllUsersProfileDirectoryW(szDest, &cchSize))
1991  goto fallback_expand;
1992 #endif
1993  PathAppendW(szDest, szTemp + strlenW(AllUsersProfileW));
1994  }
1995 #ifndef __REACTOS__
1996  else if (!strncmpiW(szTemp, PublicProfileW, strlenW(PublicProfileW)))
1997  {
1998  WCHAR szAllUsers[MAX_PATH], def_val[MAX_PATH];
1999 
2000  GetSystemDirectoryW(def_val, MAX_PATH);
2001  strcpyW( def_val + 3, UsersPublicW );
2002 
2004  PathAppendW(szDest, szAllUsers);
2005  PathAppendW(szDest, szTemp + strlenW(PublicProfileW));
2006  }
2007 #endif
2008  else if (!strncmpiW(szTemp, UserProfileW, strlenW(UserProfileW)))
2009  {
2010 #ifndef __REACTOS__
2012  DWORD userLen = MAX_PATH;
2013 
2014  strcpyW(szDest, szProfilesPrefix);
2015  GetUserNameW(userName, &userLen);
2016  PathAppendW(szDest, userName);
2017 #else
2018  DWORD cchSize = cchDest;
2019  if (!_SHGetUserProfileDirectoryW(hToken, szDest, &cchSize))
2020  goto fallback_expand;
2021 #endif
2022  PathAppendW(szDest, szTemp + strlenW(UserProfileW));
2023  }
2024  else if (!strncmpiW(szTemp, SystemDriveW, strlenW(SystemDriveW)))
2025  {
2026 #ifndef __REACTOS__
2027  GetSystemDirectoryW(szDest, MAX_PATH);
2028 #else
2029  if (!GetSystemDirectoryW(szDest, cchDest))
2030  goto fallback_expand;
2031 #endif
2032  strcpyW(szDest + 3, szTemp + strlenW(SystemDriveW) + 1);
2033  }
2034  else
2035 #ifdef __REACTOS__
2036 fallback_expand:
2037 #endif
2038  {
2039 #ifndef __REACTOS__
2040  DWORD ret = ExpandEnvironmentStringsW(szTemp, szDest, MAX_PATH);
2041 #else
2042  DWORD ret = SHExpandEnvironmentStringsForUserW(hToken, szTemp, szDest, cchDest);
2043 #endif
2044 
2045 #ifndef __REACTOS__
2046  if (ret > MAX_PATH)
2047 #else
2048  if (ret > cchDest)
2049 #endif
2051  else if (ret == 0)
2053  else if (!strcmpW( szTemp, szDest )) break; /* nothing expanded */
2054  }
2055  if (SUCCEEDED(hr)) strcpyW(szTemp, szDest);
2056  }
2057 end:
2058 #ifndef __REACTOS__
2059  if (key)
2060  RegCloseKey(key);
2061 #endif
2062  TRACE("returning 0x%08x (input was %s, output is %s)\n", hr,
2063  debugstr_w(szSrc), debugstr_w(szDest));
2064  return hr;
2065 }
static const WCHAR PublicProfileW[]
Definition: shellpath.c:631
#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:633
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:637
#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:605
BOOL _SHGetUserProfileDirectoryW(HANDLE hToken, LPWSTR szPath, LPDWORD lpcchPath)
Definition: shellpath.c:1509
#define debugstr_w
Definition: kernel32.h:32
static const WCHAR AllUsersProfileW[]
Definition: shellpath.c:629
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR UsersPublicW[]
Definition: shellpath.c:624
static HRESULT _SHOpenProfilesKey(PHKEY pKey)
Definition: shellpath.c:1869
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:77
static const WCHAR SystemDriveW[]
Definition: shellpath.c:634
#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:642
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:1227
static const WCHAR AllUsersW[]
Definition: shellpath.c:647
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:1884
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:638
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:42

Referenced by _SHGetUserShellFolderPath(), and SHGetFolderPathAndSubDirW().

◆ _SHGetAllUsersProfilePath()

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

Definition at line 1829 of file shellpath.c.

1831 {
1832  HRESULT hr;
1833 
1834  TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath);
1835 
1836  if (folder >= ARRAY_SIZE(CSIDL_Data))
1837  return E_INVALIDARG;
1839  return E_INVALIDARG;
1840  if (!pszPath)
1841  return E_INVALIDARG;
1842 
1844 #ifndef __REACTOS__
1845  hr = _SHGetDefaultValue(folder, pszPath);
1846 #else
1847  hr = _SHGetDefaultValue(NULL, folder, pszPath);
1848 #endif
1849  else
1850  {
1851 #ifndef __REACTOS__
1853 #else
1855 #endif
1856  CSIDL_Data[folder].szValueName, pszPath);
1857  if (FAILED(hr))
1858 #ifndef __REACTOS__
1859  hr = _SHGetDefaultValue(folder, pszPath);
1860 #else
1861  hr = _SHGetDefaultValue(NULL, folder, pszPath);
1862 #endif
1863  }
1864  TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
1865  return hr;
1866 }
Definition: fci.c:115
HRESULT hr
Definition: shlfolder.c:183
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:679
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:77
static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1545
_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:1426
#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 1638 of file shellpath.c.

1640 {
1641  HRESULT hr;
1642 
1643  TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath);
1644 
1645  if (folder >= ARRAY_SIZE(CSIDL_Data))
1646  return E_INVALIDARG;
1648  return E_INVALIDARG;
1649  if (!pszPath)
1650  return E_INVALIDARG;
1651 
1653 #ifndef __REACTOS__
1654  hr = _SHGetDefaultValue(folder, pszPath);
1655 #else
1656  hr = _SHGetDefaultValue(NULL, folder, pszPath);
1657 #endif
1658  else
1659  {
1660  HKEY hKey;
1661 
1663  hr = E_FAIL;
1664  else
1665  {
1666  DWORD dwType, dwPathLen = MAX_PATH * sizeof(WCHAR);
1667 
1668  if (RegQueryValueExW(hKey, CSIDL_Data[folder].szValueName, NULL,
1669  &dwType, (LPBYTE)pszPath, &dwPathLen) ||
1670  (dwType != REG_SZ && dwType != REG_EXPAND_SZ))
1671  {
1672 #ifndef __REACTOS__
1673  hr = _SHGetDefaultValue(folder, pszPath);
1674 #else
1675  hr = _SHGetDefaultValue(NULL, folder, pszPath);
1676 #endif
1677  dwType = REG_EXPAND_SZ;
1678  switch (folder)
1679  {
1682  /* these two should never be set on 32-bit setups */
1683  if (!is_win64)
1684  {
1685  BOOL is_wow64;
1687  if (!is_wow64) break;
1688  }
1689  /* fall through */
1690  default:
1691  RegSetValueExW(hKey, CSIDL_Data[folder].szValueName, 0, dwType,
1692  (LPBYTE)pszPath, (strlenW(pszPath)+1)*sizeof(WCHAR));
1693  }
1694  }
1695  else
1696  {
1697  pszPath[dwPathLen / sizeof(WCHAR)] = '\0';
1698  hr = S_OK;
1699  }
1700  RegCloseKey(hKey);
1701  }
1702  }
1703  TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
1704  return hr;
1705 }
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:679
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static const WCHAR szCurrentVersion[]
Definition: shellpath.c:529
#define E_FAIL
Definition: ddrawi.h:102
#define CSIDL_PROGRAM_FILESX86
Definition: shlobj.h:2044
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
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:1974
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:77
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:1545
_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:2046
#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 1545 of file shellpath.c.

1549 {
1550  HRESULT hr;
1551  WCHAR resourcePath[MAX_PATH];
1552 
1553  TRACE("0x%02x,%p\n", folder, pszPath);
1554 
1555  if (folder >= ARRAY_SIZE(CSIDL_Data))
1556  return E_INVALIDARG;
1557 
1558  if (!pszPath)
1559  return E_INVALIDARG;
1560 
1561 #ifdef __REACTOS__
1562  if (hToken != NULL && hToken != (HANDLE)-1)
1563  {
1564  FIXME("unsupported for user other than current or default\n");
1565  }
1566 #endif
1567 
1568  if (!is_win64)
1569  {
1570  BOOL is_wow64;
1571 
1572  switch (folder)
1573  {
1574  case CSIDL_PROGRAM_FILES:
1578  break;
1583  break;
1584  }
1585  }
1586 
1587  switch (CSIDL_Data[folder].type)
1588  {
1589  case CSIDL_Type_User:
1590  strcpyW(pszPath, UserProfileW);
1591  break;
1592  case CSIDL_Type_AllUsers:
1593 #ifndef __REACTOS__
1594  strcpyW(pszPath, PublicProfileW);
1595 #else
1596  strcpyW(pszPath, AllUsersProfileW);
1597 #endif
1598  break;
1599  case CSIDL_Type_CurrVer:
1600  strcpyW(pszPath, SystemDriveW);
1601  break;
1602  default:
1603  ; /* no corresponding env. var, do nothing */
1604  }
1605 
1606  hr = S_OK;
1607  if (CSIDL_Data[folder].szDefaultPath)
1608  {
1609  if (IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath))
1610  {
1612  LOWORD(CSIDL_Data[folder].szDefaultPath), resourcePath, MAX_PATH))
1613  {
1614  PathAppendW(pszPath, resourcePath);
1615  }
1616  else
1617  {
1618  ERR("(%d,%s), LoadString failed, missing translation?\n", folder,
1619  debugstr_w(pszPath));
1620  hr = E_FAIL;
1621  }
1622  }
1623  else
1624  {
1625  PathAppendW(pszPath, CSIDL_Data[folder].szDefaultPath);
1626  }
1627  }
1628  TRACE("returning 0x%08x\n", hr);
1629  return hr;
1630 }
static const WCHAR PublicProfileW[]
Definition: shellpath.c:631
Definition: fci.c:115
static const WCHAR UserProfileW[]
Definition: shellpath.c:633
HRESULT hr
Definition: shlfolder.c:183
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:679
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define CSIDL_PROGRAM_FILES
Definition: shlobj.h:2040
#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:2044
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:110
static const WCHAR AllUsersProfileW[]
Definition: shellpath.c:629
#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:1974
#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:77
static const WCHAR SystemDriveW[]
Definition: shellpath.c:634
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:2046
#define CSIDL_PROGRAM_FILES_COMMON
Definition: shlobj.h:2045
#define ERR(fmt,...)
Definition: debug.h:109
#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
#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 1884 of file shellpath.c.

1886 {
1887  HRESULT hr;
1888  DWORD type, dwPathLen = MAX_PATH * sizeof(WCHAR);
1889  LONG lRet;
1890 
1891  TRACE("%p,%s,%p,%s\n", profilesKey, debugstr_w(szValueName), szValue,
1892  debugstr_w(szDefault));
1893  lRet = RegQueryValueExW(profilesKey, szValueName, NULL, &type,
1894  (LPBYTE)szValue, &dwPathLen);
1895  if (!lRet && (type == REG_SZ || type == REG_EXPAND_SZ) && dwPathLen
1896  && *szValue)
1897  {
1898  dwPathLen /= sizeof(WCHAR);
1899  szValue[dwPathLen] = '\0';
1900  hr = S_OK;
1901  }
1902  else
1903  {
1904  /* Missing or invalid value, set a default */
1905  lstrcpynW(szValue, szDefault, MAX_PATH);
1906  TRACE("Setting missing value %s to %s\n", debugstr_w(szValueName),
1907  debugstr_w(szValue));
1908  lRet = RegSetValueExW(profilesKey, szValueName, 0, REG_EXPAND_SZ,
1909  (LPBYTE)szValue,
1910  (strlenW(szValue) + 1) * sizeof(WCHAR));
1911  if (lRet)
1912  hr = HRESULT_FROM_WIN32(lRet);
1913  else
1914  hr = S_OK;
1915  }
1916  TRACE("returning 0x%08x (output value is %s)\n", hr, debugstr_w(szValue));
1917  return hr;
1918 }
#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:405
unsigned char * LPBYTE
Definition: typedefs.h:52
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:77
#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 1509 of file shellpath.c.

1510 {
1511  BOOL result;
1512  if (!hToken)
1513  {
1515  result = GetUserProfileDirectoryW(hToken, szPath, lpcchPath);
1516  CloseHandle(hToken);
1517  }
1518  else if ((INT) hToken == -1)
1519  {
1521  }
1522  else
1523  {
1524  result = GetUserProfileDirectoryW(hToken, szPath, lpcchPath);
1525  }
1526  TRACE("_SHGetUserProfileDirectoryW returning %S\n", szPath);
1527  return result;
1528 }
BOOL WINAPI GetDefaultUserProfileDirectoryW(_Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
Definition: profile.c:1360
#define CloseHandle
Definition: compat.h:406
BOOL WINAPI GetUserProfileDirectoryW(_In_ HANDLE hToken, _Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
Definition: profile.c:1709
int32_t INT
Definition: typedefs.h:56
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 1748 of file shellpath.c.

1750 {
1751  const WCHAR *szValueName;
1752  WCHAR buffer[40];
1753  HRESULT hr;
1754 
1755  TRACE("%p,0x%08x,0x%02x,%p\n", hToken, dwFlags, folder, pszPath);
1756 
1757  if (folder >= ARRAY_SIZE(CSIDL_Data))
1758  return E_INVALIDARG;
1760  return E_INVALIDARG;
1761  if (!pszPath)
1762  return E_INVALIDARG;
1763 
1765  {
1766 #ifndef __REACTOS__
1767  hr = _SHGetDefaultValue(folder, pszPath);
1768 #else
1769  hr = _SHGetDefaultValue(hToken, folder, pszPath);
1770 #endif
1771  }
1772  else
1773  {
1774  LPCWSTR userPrefix = NULL;
1775  HKEY hRootKey;
1776 
1777  if (hToken == (HANDLE)-1)
1778  {
1779  hRootKey = HKEY_USERS;
1780  userPrefix = DefaultW;
1781  }
1782  else if (hToken == NULL)
1783  hRootKey = HKEY_CURRENT_USER;
1784  else
1785  {
1786  hRootKey = HKEY_USERS;
1787  userPrefix = _GetUserSidStringFromToken(hToken);
1788  if (userPrefix == NULL)
1789  {
1790  hr = E_FAIL;
1791  goto error;
1792  }
1793  }
1794 
1795  /* For CSIDL_Type_User we also use the GUID if no szValueName is provided */
1796  szValueName = CSIDL_Data[folder].szValueName;
1797  if (!szValueName)
1798  {
1800  szValueName = &buffer[0];
1801  }
1802 
1803 #ifndef __REACTOS__
1804  hr = _SHGetUserShellFolderPath(hRootKey, userPrefix, szValueName, pszPath);
1805  if (FAILED(hr) && hRootKey != HKEY_LOCAL_MACHINE)
1806  hr = _SHGetUserShellFolderPath(HKEY_LOCAL_MACHINE, NULL, szValueName, pszPath);
1807  if (FAILED(hr))
1808  hr = _SHGetDefaultValue(folder, pszPath);
1809 #else
1810  hr = _SHGetUserShellFolderPath(hRootKey, hToken, userPrefix, szValueName, pszPath);
1811  if (FAILED(hr) && hRootKey != HKEY_LOCAL_MACHINE)
1812  hr = _SHGetUserShellFolderPath(HKEY_LOCAL_MACHINE, hToken, NULL, szValueName, pszPath);
1813  if (FAILED(hr))
1814  hr = _SHGetDefaultValue(hToken, folder, pszPath);
1815 #endif
1816  if (userPrefix != NULL && userPrefix != DefaultW)
1817  LocalFree((HLOCAL) userPrefix);
1818  }
1819 error:
1820  TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
1821  return hr;
1822 }
#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:679
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:77
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1545
_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:1707
LPCWSTR szValueName
Definition: shellpath.c:674
static HRESULT _SHGetUserShellFolderPath(HKEY rootKey, LPCWSTR userPrefix, LPCWSTR value, LPWSTR path)
Definition: shellpath.c:1426
static const WCHAR DefaultW[]
Definition: shellpath.c:628
#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 1426 of file shellpath.c.

1431 {
1432  HRESULT hr;
1433  WCHAR shellFolderPath[MAX_PATH], userShellFolderPath[MAX_PATH];
1434  LPCWSTR pShellFolderPath, pUserShellFolderPath;
1435  HKEY userShellFolderKey, shellFolderKey;
1436  DWORD dwType, dwPathLen;
1437 
1438  TRACE("%p,%s,%s,%p\n",rootKey, debugstr_w(userPrefix), debugstr_w(value),
1439  path);
1440 
1441  if (userPrefix)
1442  {
1443  strcpyW(shellFolderPath, userPrefix);
1444  PathAddBackslashW(shellFolderPath);
1445  strcatW(shellFolderPath, szSHFolders);
1446  pShellFolderPath = shellFolderPath;
1447  strcpyW(userShellFolderPath, userPrefix);
1448  PathAddBackslashW(userShellFolderPath);
1449  strcatW(userShellFolderPath, szSHUserFolders);
1450  pUserShellFolderPath = userShellFolderPath;
1451  }
1452  else
1453  {
1454  pUserShellFolderPath = szSHUserFolders;
1455  pShellFolderPath = szSHFolders;
1456  }
1457 
1458  if (RegCreateKeyW(rootKey, pShellFolderPath, &shellFolderKey))
1459  {
1460  TRACE("Failed to create %s\n", debugstr_w(pShellFolderPath));
1461  return E_FAIL;
1462  }
1463  if (RegCreateKeyW(rootKey, pUserShellFolderPath, &userShellFolderKey))
1464  {
1465  TRACE("Failed to create %s\n",
1466  debugstr_w(pUserShellFolderPath));
1467  RegCloseKey(shellFolderKey);
1468  return E_FAIL;
1469  }
1470 
1471  dwPathLen = MAX_PATH * sizeof(WCHAR);
1472  if (!RegQueryValueExW(userShellFolderKey, value, NULL, &dwType,
1473  (LPBYTE)path, &dwPathLen) && (dwType == REG_EXPAND_SZ || dwType == REG_SZ))
1474  {
1475  LONG ret;
1476 
1477  path[dwPathLen / sizeof(WCHAR)] = '\0';
1478  if (dwType == REG_EXPAND_SZ && path[0] == '%')
1479  {
1480  WCHAR szTemp[MAX_PATH];
1481 
1482 #ifndef __REACTOS__
1484 #else
1485  hr = _SHExpandEnvironmentStrings(hToken, path, szTemp, _countof(szTemp));
1486  if (FAILED(hr))
1487  goto end;
1488 #endif
1489  lstrcpynW(path, szTemp, MAX_PATH);
1490  }
1491  ret = RegSetValueExW(shellFolderKey, value, 0, REG_SZ, (LPBYTE)path,
1492  (strlenW(path) + 1) * sizeof(WCHAR));
1493  if (ret != ERROR_SUCCESS)
1495  else
1496  hr = S_OK;
1497  }
1498  else
1499  hr = E_FAIL;
1500 #ifdef __REACTOS__
1501 end:
1502 #endif
1503  RegCloseKey(shellFolderKey);
1504  RegCloseKey(userShellFolderKey);
1505  TRACE("returning 0x%08x\n", hr);
1506  return hr;
1507 }
#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:1934
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define _countof(array)
Definition: fontsub.cpp:30
GLuint GLuint end
Definition: gl.h:1545
#define E_FAIL
Definition: ddrawi.h:102
#define lstrcpynW
Definition: compat.h:405
static const WCHAR szSHUserFolders[]
Definition: shellpath.c:641
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
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:77
#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:640
#define REG_SZ
Definition: layer.c:22

Referenced by _SHGetAllUsersProfilePath(), and _SHGetUserProfilePath().

◆ _SHOpenProfilesKey()

static HRESULT _SHOpenProfilesKey ( PHKEY  pKey)
static

Definition at line 1869 of file shellpath.c.

1870 {
1871  LONG lRet;
1872  DWORD disp;
1873 
1875  KEY_ALL_ACCESS, NULL, pKey, &disp);
1876  return HRESULT_FROM_WIN32(lRet);
1877 }
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:636
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by _SHExpandEnvironmentStrings().

◆ _SHRegisterCommonShellFolders()

static HRESULT _SHRegisterCommonShellFolders ( void  )
static

Definition at line 2518 of file shellpath.c.

2519 {
2520  static const UINT folders[] = {
2533  };
2534  HRESULT hr;
2535 
2536  TRACE("\n");
2538  szSHFolders, folders, ARRAY_SIZE(folders));
2539  TRACE("returning 0x%08x\n", hr);
2540  return hr;
2541 }
HRESULT hr
Definition: shlfolder.c:183
#define CSIDL_COMMON_DESKTOPDIRECTORY
Definition: shlobj.h:2027
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2033
static HRESULT _SHRegisterFolders(HKEY hRootKey, HANDLE hToken, LPCWSTR szUserShellFolderPath, LPCWSTR szShellFolderPath, const UINT folders[], UINT foldersLen)
Definition: shellpath.c:2359
#define CSIDL_COMMON_STARTUP
Definition: shlobj.h:2026
#define CSIDL_COMMON_PICTURES
Definition: shlobj.h:2053
#define CSIDL_COMMON_TEMPLATES
Definition: shlobj.h:2047
static const WCHAR szSHUserFolders[]
Definition: shellpath.c:641
#define CSIDL_COMMON_PROGRAMS
Definition: shlobj.h:2025
smooth NULL
Definition: ftsmooth.c:416
#define CSIDL_COMMON_STARTMENU
Definition: shlobj.h:2024
#define CSIDL_COMMON_ADMINTOOLS
Definition: shlobj.h:2049
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define CSIDL_COMMON_VIDEO
Definition: shlobj.h:2054
#define CSIDL_COMMON_APPDATA
Definition: shlobj.h:2037
#define CSIDL_COMMON_MUSIC
Definition: shlobj.h:2052
#define ARRAY_SIZE(a)
Definition: main.h:24
#define CSIDL_COMMON_DOCUMENTS
Definition: shlobj.h:2048
unsigned int UINT
Definition: ndis.h:50
static const WCHAR szSHFolders[]
Definition: shellpath.c:640
#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 2359 of file shellpath.c.

2362 {
2363  const WCHAR *szValueName;
2364  WCHAR buffer[40];
2365  UINT i;
2366  WCHAR path[MAX_PATH];
2367  HRESULT hr = S_OK;
2368  HKEY hUserKey = NULL, hKey = NULL;
2369  DWORD dwType, dwPathLen;
2370  LONG ret;
2371 
2372  TRACE("%p,%p,%s,%p,%u\n", hRootKey, hToken,
2373  debugstr_w(szUserShellFolderPath), folders, foldersLen);
2374 
2375  ret = RegCreateKeyW(hRootKey, szUserShellFolderPath, &hUserKey);
2376  if (ret)
2378  else
2379  {
2380  ret = RegCreateKeyW(hRootKey, szShellFolderPath, &hKey);
2381  if (ret)
2383  }
2384  for (i = 0; SUCCEEDED(hr) && i < foldersLen; i++)
2385  {
2386  dwPathLen = MAX_PATH * sizeof(WCHAR);
2387 
2388  /* For CSIDL_Type_User we also use the GUID if no szValueName is provided */
2389  szValueName = CSIDL_Data[folders[i]].szValueName;
2390  if (!szValueName && CSIDL_Data[folders[i]].type == CSIDL_Type_User)
2391  {
2392  StringFromGUID2( CSIDL_Data[folders[i]].id, buffer, 39 );
2393  szValueName = &buffer[0];
2394  }
2395 
2396  if (!RegQueryValueExW(hUserKey, szValueName, NULL,
2397  &dwType, (LPBYTE)path, &dwPathLen) &&
2398  (dwType == REG_SZ || dwType == REG_EXPAND_SZ))
2399  {
2400  hr = SHGetFolderPathW(NULL, folders[i] | CSIDL_FLAG_CREATE,
2401  hToken, SHGFP_TYPE_CURRENT, path);
2402  }
2403  else
2404  {
2405  *path = '\0';
2406  if (CSIDL_Data[folders[i]].type == CSIDL_Type_User)
2407  _SHGetUserProfilePath(hToken, SHGFP_TYPE_CURRENT, folders[i],
2408  path);
2409  else if (CSIDL_Data[folders[i]].type == CSIDL_Type_AllUsers)
2411  else if (CSIDL_Data[folders[i]].type == CSIDL_Type_WindowsPath)
2412  {
2414  if (CSIDL_Data[folders[i]].szDefaultPath &&
2415  !IS_INTRESOURCE(CSIDL_Data[folders[i]].szDefaultPath))
2416  {
2418  strcatW(path, CSIDL_Data[folders[i]].szDefaultPath);
2419  }
2420  }
2421  else
2422  hr = E_FAIL;
2423  if (*path)
2424  {
2425  ret = RegSetValueExW(hUserKey, szValueName, 0, REG_EXPAND_SZ,
2426  (LPBYTE)path, (strlenW(path) + 1) * sizeof(WCHAR));
2427  if (ret)
2429  else
2430  {
2431  hr = SHGetFolderPathW(NULL, folders[i] | CSIDL_FLAG_CREATE,
2432  hToken, SHGFP_TYPE_CURRENT, path);
2433  ret = RegSetValueExW(hKey, szValueName, 0, REG_SZ,
2434  (LPBYTE)path, (strlenW(path) + 1) * sizeof(WCHAR));
2435  if (ret)
2437  }
2438  }
2439  }
2440  }
2441  if (hUserKey)
2442  RegCloseKey(hUserKey);
2443  if (hKey)
2444  RegCloseKey(hKey);
2445 
2446  TRACE("returning 0x%08x\n", hr);
2447  return hr;
2448 }
#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:679
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:52
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:1748
LONG HRESULT
Definition: typedefs.h:77
#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:1829
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:2087
LPCWSTR szValueName
Definition: shellpath.c:674
#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 2450 of file shellpath.c.

2451 {
2452  static const UINT folders[] = {
2456  CSIDL_APPDATA,
2457  CSIDL_STARTUP,
2458  CSIDL_RECENT,
2459  CSIDL_SENDTO,
2461  CSIDL_MYMUSIC,
2462  CSIDL_MYVIDEO,
2464  CSIDL_NETHOOD,
2469  CSIDL_COOKIES,
2470  CSIDL_HISTORY,
2472  CSIDL_FONTS,
2474 /* Cannot use #if _WIN32_WINNT >= 0x0600 because _WIN32_WINNT == 0x0600 here. */
2475 #ifndef __REACTOS__
2478  CSIDL_LINKS,
2482 #endif
2483  };
2484  WCHAR userShellFolderPath[MAX_PATH], shellFolderPath[MAX_PATH];
2485  LPCWSTR pUserShellFolderPath, pShellFolderPath;
2486  HRESULT hr = S_OK;
2487  HKEY hRootKey;
2488  HANDLE hToken;
2489 
2490  TRACE("%s\n", bDefault ? "TRUE" : "FALSE");
2491  if (bDefault)
2492  {
2493  hToken = (HANDLE)-1;
2494  hRootKey = HKEY_USERS;
2495  strcpyW(userShellFolderPath, DefaultW);
2496  PathAddBackslashW(userShellFolderPath);
2497  strcatW(userShellFolderPath, szSHUserFolders);
2498  pUserShellFolderPath = userShellFolderPath;
2499  strcpyW(shellFolderPath, DefaultW);
2500  PathAddBackslashW(shellFolderPath);
2501  strcatW(shellFolderPath, szSHFolders);
2502  pShellFolderPath = shellFolderPath;
2503  }
2504  else
2505  {
2506  hToken = NULL;
2507  hRootKey = HKEY_CURRENT_USER;
2508  pUserShellFolderPath = szSHUserFolders;
2509  pShellFolderPath = szSHFolders;
2510  }
2511 
2512  hr = _SHRegisterFolders(hRootKey, hToken, pUserShellFolderPath,
2513  pShellFolderPath, folders, ARRAY_SIZE(folders));
2514  TRACE("returning 0x%08x\n", hr);
2515  return hr;
2516 }
#define HKEY_USERS
Definition: winreg.h:13
#define CSIDL_COOKIES
Definition: shlobj.h:2035
#define CSIDL_MYVIDEO
Definition: shlobj.h:2017
HRESULT hr
Definition: shlfolder.c:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define CSIDL_MYPICTURES
Definition: shlobj.h:2041
#define CSIDL_CONTACTS
Definition: shellpath.c:662
#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:2359
#define CSIDL_HISTORY
Definition: shlobj.h:2036
#define CSIDL_FONTS
Definition: shlobj.h:2022
#define CSIDL_INTERNET_CACHE
Definition: shlobj.h:2034
static const WCHAR szSHUserFolders[]
Definition: shellpath.c:641
#define CSIDL_RECENT
Definition: shlobj.h:2011
#define CSIDL_FAVORITES
Definition: shlobj.h:2009
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:289
smooth NULL
Definition: ftsmooth.c:416
#define CSIDL_SEARCHES
Definition: shellpath.c:667
#define TRACE(s)
Definition: solgame.cpp:4
#define CSIDL_ADMINTOOLS
Definition: shlobj.h:2050
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
#define CSIDL_LOCAL_APPDATA
Definition: shlobj.h:2030
#define CSIDL_SENDTO
Definition: shlobj.h:2012
#define CSIDL_APPDATA
Definition: shlobj.h:2028
#define MAX_PATH
Definition: compat.h:26
static HANDLE
Definition: shellpath.c:88
#define CSIDL_STARTUP
Definition: shlobj.h:2010
#define CSIDL_LINKS
Definition: shellpath.c:664
#define CSIDL_APPDATA_LOCALLOW
Definition: shellpath.c:665
#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:663
#define ARRAY_SIZE(a)
Definition: main.h:24
#define CSIDL_PRINTHOOD
Definition: shlobj.h:2029
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:666
#define CSIDL_NETHOOD
Definition: shlobj.h:2021
static const WCHAR szSHFolders[]
Definition: shellpath.c:640
#define CSIDL_PERSONAL
Definition: shlobj.h:2008
#define CSIDL_STARTMENU
Definition: shlobj.h:2014
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2018
#define CSIDL_PROGRAMS
Definition: shlobj.h:2005
#define CSIDL_TEMPLATES
Definition: shlobj.h:2023
static const WCHAR DefaultW[]
Definition: shellpath.c:628
#define CSIDL_MYMUSIC
Definition: shlobj.h:2016

Referenced by SHELL_RegisterShellFolders().

◆ IsLFNDriveA()

BOOL WINAPI IsLFNDriveA ( LPCSTR  lpszPath)

Definition at line 236 of file shellpath.c.

237 {
238  DWORD fnlen;
239 
240  if (!GetVolumeInformationA(lpszPath, NULL, 0, NULL, &fnlen, NULL, NULL, 0))
241  return FALSE;
242  return fnlen > 12;
243 }
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 260 of file shellpath.c.

261 {
262  if (SHELL_OsIsUnicode())
263  return IsLFNDriveW(lpszPath);
264  return IsLFNDriveA(lpszPath);
265 }
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL WINAPI IsLFNDriveW(LPCWSTR lpszPath)
Definition: shellpath.c:248
BOOL WINAPI IsLFNDriveA(LPCSTR lpszPath)
Definition: shellpath.c:236

◆ IsLFNDriveW()

BOOL WINAPI IsLFNDriveW ( LPCWSTR  lpszPath)

Definition at line 248 of file shellpath.c.

249 {
250  DWORD fnlen;
251 
252  if (!GetVolumeInformationW(lpszPath, NULL, 0, NULL, &fnlen, NULL, NULL, 0))
253  return FALSE;
254  return fnlen > 12;
255 }
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 64 of file shellpath.c.

67 {
68  if (SHELL_OsIsUnicode())
69  return PathAppendW(lpszPath1, lpszPath2);
70  return PathAppendA(lpszPath1, lpszPath2);
71 }
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 359 of file shellpath.c.

360 {
361  int i = 0;
362  DWORD rc = 0;
363  int length = 0;
364 
365  if (SHELL_OsIsUnicode())
366  {
367  LPWSTR p = lpszFileW;
368 
369  TRACE("Cleanup %s\n",debugstr_w(lpszFileW));
370 
371  if (lpszPathW)
372  length = strlenW(lpszPathW);
373 
374  while (*p)
375  {
376  int gct = PathGetCharTypeW(*p);
377  if (gct == GCT_INVALID || gct == GCT_WILD || gct == GCT_SEPARATOR)
378  {
379  lpszFileW[i]='-';
380  rc |= PCS_REPLACEDCHAR;
381  }
382  else
383  lpszFileW[i]=*p;
384  i++;
385  p++;
386  if (length + i == MAX_PATH)
387  {
388  rc |= PCS_FATAL | PCS_PATHTOOLONG;
389  break;
390  }
391  }
392  lpszFileW[i]=0;
393  }
394  else
395  {
396  LPSTR lpszFileA = (LPSTR)lpszFileW;
397  LPCSTR lpszPathA = (LPCSTR)lpszPathW;
398  LPSTR p = lpszFileA;
399 
400  TRACE("Cleanup %s\n",debugstr_a(lpszFileA));
401 
402  if (lpszPathA)
403  length = strlen(lpszPathA);
404 
405  while (*p)
406  {
407  int gct = PathGetCharTypeA(*p);
408  if (gct == GCT_INVALID || gct == GCT_WILD || gct == GCT_SEPARATOR)
409  {
410  lpszFileA[i]='-';
411  rc |= PCS_REPLACEDCHAR;
412  }
413  else
414  lpszFileA[i]=*p;
415  i++;
416  p++;
417  if (length + i == MAX_PATH)
418  {
419  rc |= PCS_FATAL | PCS_PATHTOOLONG;
420  break;
421  }
422  }
423  lpszFileA[i]=0;
424  }
425  return rc;
426 }
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:323
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:327
#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:324
GLfloat GLfloat p
Definition: glext.h:8902
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ PathFileExistsAW()

BOOL WINAPI PathFileExistsAW ( LPCVOID  lpszPath)

Definition at line 226 of file shellpath.c.

227 {
228  if (SHELL_OsIsUnicode())
229  return PathFileExistsW (lpszPath);
230  return PathFileExistsA (lpszPath);
231 }
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 80 of file shellpath.c.

81 {
82  TRACE("(%s)\n",lpszPath);
83 
84  lpszPath = PathFindExtensionA(lpszPath);
85  return (LPSTR)(*lpszPath?(lpszPath+1):lpszPath);
86 }
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 91 of file shellpath.c.

92 {
93  TRACE("(%s)\n",debugstr_w(lpszPath));
94 
95  lpszPath = PathFindExtensionW(lpszPath);
96  return (LPWSTR)(*lpszPath?(lpszPath+1):lpszPath);
97 }
#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 124 of file shellpath.c.

125 {
126  CHAR path[MAX_PATH];
127 
128  TRACE("%s\n", pszPath);
129 
130  if (GetShortPathNameA(pszPath, path, MAX_PATH))
131  {
132  lstrcpyA(pszPath, path);
133  }
134 }
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 154 of file shellpath.c.

155 {
156  if(SHELL_OsIsUnicode())
157  PathGetShortPathW(pszPath);
158  PathGetShortPathA(pszPath);
159 }
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
static void PathGetShortPathW(LPWSTR pszPath)
Definition: shellpath.c:139
static void PathGetShortPathA(LPSTR pszPath)
Definition: shellpath.c:124

◆ PathGetShortPathW()

static void PathGetShortPathW ( LPWSTR  pszPath)
static

Definition at line 139 of file shellpath.c.

140 {
142 
143  TRACE("%s\n", debugstr_w(pszPath));
144 
145  if (GetShortPathNameW(pszPath, path, MAX_PATH))
146  {
147  lstrcpyW(pszPath, path);
148  }
149 }
#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:414

Referenced by PathGetShortPathAW().

◆ PathIsExeA()

static BOOL PathIsExeA ( LPCSTR  lpszPath)
static

Definition at line 178 of file shellpath.c.

179 {
180  LPCSTR lpszExtension = PathGetExtensionA(lpszPath);
181  int i;
182  static const char * const lpszExtensions[] =
183  {"exe", "com", "pif", "cmd", "bat", "scf", "scr", NULL };
184 
185  TRACE("path=%s\n",lpszPath);
186 
187  for(i=0; lpszExtensions[i]; i++)
188  if (!lstrcmpiA(lpszExtension,lpszExtensions[i])) return TRUE;
189 
190  return FALSE;
191 }
#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:80

Referenced by PathIsExeAW().

◆ PathIsExeAW()

BOOL WINAPI PathIsExeAW ( LPCVOID  path)

Definition at line 216 of file shellpath.c.

217 {
218  if (SHELL_OsIsUnicode())
219  return PathIsExeW (path);
220  return PathIsExeA(path);
221 }
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
BOOL PathIsExeW(LPCWSTR lpszPath)
Definition: shellpath.c:196
static BOOL PathIsExeA(LPCSTR lpszPath)
Definition: shellpath.c:178

◆ PathIsExeW()

BOOL PathIsExeW ( LPCWSTR  lpszPath)

Definition at line 196 of file shellpath.c.

197 {
198  LPCWSTR lpszExtension = PathGetExtensionW(lpszPath);
199  int i;
200  static const WCHAR lpszExtensions[][4] =
201  {{'e','x','e','\0'}, {'c','o','m','\0'}, {'p','i','f','\0'},
202  {'c','m','d','\0'}, {'b','a','t','\0'}, {'s','c','f','\0'},
203  {'s','c','r','\0'}, {'\0'} };
204 
205  TRACE("path=%s\n",debugstr_w(lpszPath));
206 
207  for(i=0; lpszExtensions[i][0]; i++)
208  if (!strcmpiW(lpszExtension,lpszExtensions[i])) return TRUE;
209 
210  return FALSE;
211 }
#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:91

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

◆ PathIsRootAW()

BOOL WINAPI PathIsRootAW ( LPCVOID  lpszPath)

Definition at line 168 of file shellpath.c.

169 {
170  if (SHELL_OsIsUnicode())
171  return PathIsRootW(lpszPath);
172  return PathIsRootA(lpszPath);
173 }
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 273 of file shellpath.c.

279 {
280  FIXME("%p %u %s %s %s stub\n",
281  lpszBuffer, dwBuffSize, debugstr_a(lpszShortName),
282  debugstr_a(lpszLongName), debugstr_a(lpszPathName));
283  return TRUE;
284 }
#define TRUE
Definition: types.h:120
#define FIXME(fmt,...)
Definition: debug.h:110
#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 305 of file shellpath.c.

311 {
312  if (SHELL_OsIsUnicode())
313  return PathMakeUniqueNameW(lpszBuffer,dwBuffSize, lpszShortName,lpszLongName,lpszPathName);
314  return PathMakeUniqueNameA(lpszBuffer,dwBuffSize, lpszShortName,lpszLongName,lpszPathName);
315 }
static BOOL PathMakeUniqueNameW(LPWSTR lpszBuffer, DWORD dwBuffSize, LPCWSTR lpszShortName, LPCWSTR lpszLongName, LPCWSTR lpszPathName)
Definition: shellpath.c:289
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:273

◆ PathMakeUniqueNameW()

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

Definition at line 289 of file shellpath.c.

295 {
296  FIXME("%p %u %s %s %s stub\n",
297  lpszBuffer, dwBuffSize, debugstr_w(lpszShortName),
298  debugstr_w(lpszLongName), debugstr_w(lpszPathName));
299  return TRUE;
300 }
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110

Referenced by PathMakeUniqueNameAW().

◆ PathProcessCommandA()

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

Definition at line 482 of file shellpath.c.

487 {
488  FIXME("%s %p 0x%04x 0x%04x stub\n",
489  lpszPath, lpszBuff, dwBuffSize, dwFlags);
490  if(!lpszPath) return -1;
491  if(lpszBuff) strcpy(lpszBuff, lpszPath);
492  return strlen(lpszPath);
493 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define FIXME(fmt,...)
Definition: debug.h:110
_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 514 of file shellpath.c.

519 {
520  if (SHELL_OsIsUnicode())
521  return PathProcessCommandW(lpszPath, lpszBuff, dwBuffSize, dwFlags);
522  return PathProcessCommandA(lpszPath, lpszBuff, dwBuffSize, dwFlags);
523 }
static LONG PathProcessCommandA(LPCSTR lpszPath, LPSTR lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
Definition: shellpath.c:482
static LONG PathProcessCommandW(LPCWSTR lpszPath, LPWSTR lpszBuff, DWORD dwBuffSize, DWORD dwFlags)
Definition: shellpath.c:498
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 498 of file shellpath.c.

503 {
504  FIXME("(%s, %p, 0x%04x, 0x%04x) stub\n",
505  debugstr_w(lpszPath), lpszBuff, dwBuffSize, dwFlags);
506  if(!lpszPath) return -1;
507  if(lpszBuff) strcpyW(lpszBuff, lpszPath);
508  return strlenW(lpszPath);
509 }
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:110
_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 431 of file shellpath.c.

432 {
433  FIXME("%s\n",pszPath);
434  return FALSE;
435 }
#define FIXME(fmt,...)
Definition: debug.h:110

Referenced by PathQualifyAW().

◆ PathQualifyAW()

BOOL WINAPI PathQualifyAW ( LPCVOID  pszPath)

Definition at line 449 of file shellpath.c.

450 {
451  if (SHELL_OsIsUnicode())
452  return PathQualifyW(pszPath);
453  return PathQualifyA(pszPath);
454 }
static BOOL PathQualifyA(LPCSTR pszPath)
Definition: shellpath.c:431
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
static BOOL PathQualifyW(LPCWSTR pszPath)
Definition: shellpath.c:440

◆ PathQualifyW()

static BOOL PathQualifyW ( LPCWSTR  pszPath)
static

Definition at line 440 of file shellpath.c.

441 {
442  FIXME("%s\n",debugstr_w(pszPath));
443  return FALSE;
444 }
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110

Referenced by PathQualifyAW().

◆ PathRemoveFileSpecAW()

BOOL WINAPI PathRemoveFileSpecAW ( LPVOID  lpszPath)

Definition at line 110 of file shellpath.c.

111 {
112  if (SHELL_OsIsUnicode())
113  return PathRemoveFileSpecW(lpszPath);
114  return PathRemoveFileSpecA(lpszPath);
115 }
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 456 of file shellpath.c.

457 {
458  FIXME("(%s,%p,0x%08x),stub!\n", debugstr_a(path), paths, flags);
459  return FALSE;
460 }
#define FIXME(fmt,...)
Definition: debug.h:110
#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 471 of file shellpath.c.

472 {
473  if (SHELL_OsIsUnicode())
474  return PathResolveW(path, (LPCWSTR*)paths, flags);
475  else
476  return PathResolveA(path, (LPCSTR*)paths, flags);
477 }
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:462
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:456

◆ PathResolveW()

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

Definition at line 462 of file shellpath.c.

463 {
464  FIXME("(%s,%p,0x%08x),stub!\n", debugstr_w(path), paths, flags);
465  return FALSE;
466 }
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
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 320 of file shellpath.c.

321 {
322  WCHAR pathW[MAX_PATH], retW[MAX_PATH];
323  const WCHAR *file, *ext;
324  int i = 2;
325 
326  TRACE("(%p, %s, %s, %s)\n", buffer, debugstr_w(path), debugstr_w(shortname), debugstr_w(longname));
327 
328  file = longname ? longname : shortname;
329  PathCombineW(pathW, path, file);
330  strcpyW(retW, pathW);
331  PathRemoveExtensionW(pathW);
332 
334 
335  /* now try to make it unique */
336  while (PathFileExistsW(retW))
337  {
338  static const WCHAR fmtW[] = {'%','s',' ','(','%','d',')','%','s',0};
339 
340  sprintfW(retW, fmtW, pathW, i, ext);
341  i++;
342  }
343 
344  strcpyW(buffer, retW);
345  TRACE("ret - %s\n", debugstr_w(buffer));
346 
347  return TRUE;
348 }
#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 2546 of file shellpath.c.

2547 {
2548  HRESULT hr;
2549 
2551  if (SUCCEEDED(hr))
2553  if (SUCCEEDED(hr))
2555  return hr;
2556 }
static HRESULT _SHRegisterCommonShellFolders(void)
Definition: shellpath.c:2518
#define TRUE
Definition: types.h:120
HRESULT hr
Definition: shlfolder.c:183
static HRESULT _SHRegisterUserShellFolders(BOOL bDefault)
Definition: shellpath.c:2450
LONG HRESULT
Definition: typedefs.h:77
#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 2606 of file shellpath.c.

2612 {
2614 
2615  TRACE("%p 0x%08x %p 0x%08x %p\n",
2616  hwndOwner, nFolder, hToken, dwReserved, ppidl);
2617 
2618  if (!ppidl)
2619  return E_INVALIDARG;
2620  if (dwReserved)
2621  return E_INVALIDARG;
2622 
2623  /* The virtual folders' locations are not user-dependent */
2624  *ppidl = NULL;
2625  switch (nFolder & CSIDL_FOLDER_MASK)
2626  {
2627  case CSIDL_DESKTOP:
2628  *ppidl = _ILCreateDesktop();
2629  break;
2630 
2631  case CSIDL_PERSONAL:
2632  *ppidl = _ILCreateMyDocuments();
2633  break;
2634 
2635  case CSIDL_INTERNET:
2636  *ppidl = _ILCreateIExplore();
2637  break;
2638 
2639  case CSIDL_CONTROLS:
2640  *ppidl = _ILCreateControlPanel();
2641  break;
2642 
2643  case CSIDL_PRINTERS:
2644  *ppidl = _ILCreatePrinters();
2645  break;
2646 
2647  case CSIDL_BITBUCKET:
2648  *ppidl = _ILCreateBitBucket();
2649  break;
2650 
2651  case CSIDL_DRIVES:
2652  *ppidl = _ILCreateMyComputer();
2653  break;
2654 
2655  case CSIDL_NETWORK:
2656  *ppidl = _ILCreateNetwork();
2657  break;
2658 
2659  default:
2660  {
2662 
2663  hr = SHGetFolderPathW(hwndOwner, nFolder, hToken,
2665  if (SUCCEEDED(hr))
2666  {
2667  DWORD attributes=0;
2668 
2669  TRACE("Value=%s\n", debugstr_w(szPath));
2670  hr = SHILCreateFromPathW(szPath, ppidl, &attributes);
2671  }
2673  {
2674  /* unlike SHGetFolderPath, SHGetFolderLocation in shell32
2675  * version 6.0 returns E_FAIL for nonexistent paths
2676  */
2677  hr = E_FAIL;
2678  }
2679  }
2680  }
2681  if(*ppidl)
2682  hr = S_OK;
2683 
2684  TRACE("-- (new pidl %p)\n",*ppidl);
2685  return hr;
2686 }
LPITEMIDLIST _ILCreateDesktop(void)
Definition: pidl.c:1588
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
HRESULT hr
Definition: shlfolder.c:183
LPITEMIDLIST _ILCreatePrinters(void)
Definition: pidl.c:1636
#define CSIDL_DESKTOP
Definition: shlobj.h:2003
_In_ int nFolder
Definition: shlobj.h:1435
#define CSIDL_BITBUCKET
Definition: shlobj.h:2013
#define E_FAIL
Definition: ddrawi.h:102
#define CSIDL_CONTROLS
Definition: shlobj.h:2006
#define CSIDL_FOLDER_MASK
Definition: shlobj.h:2061
#define CSIDL_PRINTERS
Definition: shlobj.h:2007
#define CSIDL_DRIVES
Definition: shlobj.h:2019
_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:1599
#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:77
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
LPITEMIDLIST _ILCreateNetwork(void)
Definition: pidl.c:1655
#define S_OK
Definition: intsafe.h:59
LPCWSTR szPath
Definition: env.c:35
#define CSIDL_INTERNET
Definition: shlobj.h:2004
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
Definition: pidl.c:392
#define CSIDL_PERSONAL
Definition: shlobj.h:2008
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2087
LPITEMIDLIST _ILCreateIExplore(void)
Definition: pidl.c:1611
LPITEMIDLIST _ILCreateMyDocuments(void)
Definition: pidl.c:1605
LPITEMIDLIST _ILCreateControlPanel(void)
Definition: pidl.c:1617
#define CSIDL_NETWORK
Definition: shlobj.h:2020
LPITEMIDLIST _ILCreateBitBucket(void)
Definition: pidl.c:1661
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by CBandSiteMenu::_CreateBuiltInISFBand(), 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 2329 of file shellpath.c.

2335 {
2336  WCHAR szTemp[MAX_PATH];
2337  HRESULT hr;
2338 
2339  TRACE("%p,%d,%p,%#x,%p\n", hwndOwner, nFolder, hToken, dwFlags, pszPath);
2340 
2341  if (pszPath)
2342  *pszPath = '\0';
2343  hr = SHGetFolderPathW(hwndOwner, nFolder, hToken, dwFlags, szTemp);
2344  if (SUCCEEDED(hr) && pszPath)
2345  WideCharToMultiByte(CP_ACP, 0, szTemp, -1, pszPath, MAX_PATH, NULL,
2346  NULL);
2347 
2348  return hr;
2349 }
#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:1435
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:77
#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:2087
#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 2100 of file shellpath.c.

2107 {
2108  int length;
2109  HRESULT hr = S_OK;
2110  LPWSTR pszSubPathW = NULL;
2111  LPWSTR pszPathW = NULL;
2112 
2113  TRACE("%p,%#x,%p,%#x,%s,%p\n", hwndOwner, nFolder, hToken, dwFlags, debugstr_a(pszSubPath), pszPath);
2114 
2115  if(pszPath) {
2116  pszPathW = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
2117  if(!pszPathW) {
2119  goto cleanup;
2120  }
2121  }
2122  TRACE("%08x,%08x,%s\n",nFolder, dwFlags, debugstr_w(pszSubPathW));
2123 
2124  /* SHGetFolderPathAndSubDirW does not distinguish if pszSubPath isn't
2125  * set (null), or an empty string.therefore call it without the parameter set
2126  * if pszSubPath is an empty string
2127  */
2128  if (pszSubPath && pszSubPath[0]) {
2129  length = MultiByteToWideChar(CP_ACP, 0, pszSubPath, -1, NULL, 0);
2130  pszSubPathW = HeapAlloc(GetProcessHeap(), 0, length * sizeof(WCHAR));
2131  if(!pszSubPathW) {
2133  goto cleanup;
2134  }
2135  MultiByteToWideChar(CP_ACP, 0, pszSubPath, -1, pszSubPathW, length);
2136  }
2137 
2138  hr = SHGetFolderPathAndSubDirW(hwndOwner, nFolder, hToken, dwFlags, pszSubPathW, pszPathW);
2139 
2140  if (SUCCEEDED(hr) && pszPath)
2141  WideCharToMultiByte(CP_ACP, 0, pszPathW, -1, pszPath, MAX_PATH, NULL, NULL);
2142 
2143 cleanup:
2144  HeapFree(GetProcessHeap(), 0, pszPathW);
2145  HeapFree(GetProcessHeap(), 0, pszSubPathW);
2146  return hr;
2147 }
#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:1435
#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:403
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:77
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:2152
#define HeapFree(x, y, z)
Definition: compat.h:402
#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 2152 of file shellpath.c.

2159 {
2160  HRESULT hr;
2161  WCHAR szBuildPath[MAX_PATH], szTemp[MAX_PATH];
2163  CSIDL_Type type;
2164  int ret;
2165 
2166  TRACE("%p,%#x,%p,%#x,%s,%p\n", hwndOwner, nFolder, hToken, dwFlags, debugstr_w(pszSubPath), pszPath);
2167 
2168  /* Windows always NULL-terminates the resulting path regardless of success
2169  * or failure, so do so first
2170  */
2171  if (pszPath)
2172  *pszPath = '\0';
2173 
2174  if (folder >= ARRAY_SIZE(CSIDL_Data))
2175  return E_INVALIDARG;
2177  return E_INVALIDARG;
2178  szTemp[0] = 0;
2180  switch (type)
2181  {
2182  case CSIDL_Type_Disallowed:
2183  hr = E_INVALIDARG;
2184  break;
2186  hr = S_FALSE;
2187  break;
2189  GetWindowsDirectoryW(szTemp, MAX_PATH);
2190  if (CSIDL_Data[folder].szDefaultPath &&
2191  !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) &&
2192  *CSIDL_Data[folder].szDefaultPath)
2193  {
2194  PathAddBackslashW(szTemp);
2195  strcatW(szTemp, CSIDL_Data[folder].szDefaultPath);
2196  }
2197  hr = S_OK;
2198  break;
2199  case CSIDL_Type_SystemPath:
2200  GetSystemDirectoryW(szTemp, MAX_PATH);
2201  if (CSIDL_Data[folder].szDefaultPath &&
2202  !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) &&
2203  *CSIDL_Data[folder].szDefaultPath)
2204  {
2205  PathAddBackslashW(szTemp);
2206  strcatW(szTemp, CSIDL_Data[folder].szDefaultPath);
2207  }
2208  hr = S_OK;
2209  break;
2212  if (CSIDL_Data[folder].szDefaultPath &&
2213  !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) &&
2214  *CSIDL_Data[folder].szDefaultPath)
2215  {
2216  PathAddBackslashW(szTemp);
2217  strcatW(szTemp, CSIDL_Data[folder].szDefaultPath);
2218  }
2219  hr = S_OK;
2220  break;
2221  case CSIDL_Type_CurrVer:
2223  break;
2224  case CSIDL_Type_User:
2225  hr = _SHGetUserProfilePath(hToken, dwFlags, folder, szTemp);
2226  break;
2227  case CSIDL_Type_AllUsers:
2229  break;
2230  default:
2231  FIXME("bogus type %d, please fix\n", type);
2232  hr = E_INVALIDARG;
2233  break;
2234  }
2235 
2236  /* Expand environment strings if necessary */
2237  if (*szTemp == '%')
2238 #ifndef __REACTOS__
2239  hr = _SHExpandEnvironmentStrings(szTemp, szBuildPath);
2240 #else
2241  hr = _SHExpandEnvironmentStrings(hToken, szTemp, szBuildPath, _countof(szBuildPath));
2242 #endif
2243  else
2244  strcpyW(szBuildPath, szTemp);
2245 
2246  if (FAILED(hr)) goto end;
2247 
2248  if(pszSubPath) {
2249  /* make sure the new path does not exceed the buffer length
2250  * and remember to backslash and terminate it */
2251  if(MAX_PATH < (lstrlenW(szBuildPath) + lstrlenW(pszSubPath) + 2)) {
2253  goto end;
2254  }
2255  PathAppendW(szBuildPath, pszSubPath);
2256  PathRemoveBackslashW(szBuildPath);
2257  }
2258  /* Copy the path if it's available before we might return */
2259  if (SUCCEEDED(hr) && pszPath)
2260  strcpyW(pszPath, szBuildPath);
2261 
2262  /* if we don't care about existing directories we are ready */
2263  if(nFolder & CSIDL_FLAG_DONT_VERIFY) goto end;
2264 
2265  if (PathFileExistsW(szBuildPath)) goto end;
2266 
2267  /* not existing but we are not allowed to create it. The return value
2268  * is verified against shell32 version 6.0.
2269  */
2270  if (!(nFolder & CSIDL_FLAG_CREATE))
2271  {
2273  goto end;
2274  }
2275 
2276  /* create directory/directories */
2277  ret = SHCreateDirectoryExW(hwndOwner, szBuildPath, NULL);
2278  if (ret && ret != ERROR_ALREADY_EXISTS)
2279  {
2280  ERR("Failed to create directory %s.\n", debugstr_w(szBuildPath));
2281  hr = E_FAIL;
2282  goto end;
2283  }
2284 
2285  TRACE("Created missing system directory %s\n", debugstr_w(szBuildPath));
2286 
2287 end:
2288  /* create desktop.ini for custom icon */
2289  if ((nFolder & CSIDL_FLAG_CREATE) &&
2290  CSIDL_Data[folder].nShell32IconIndex)
2291  {
2292  static const WCHAR s_szFormat[] = L"%%SystemRoot%%\\system32\\shell32.dll,%d";
2293  WCHAR szIconLocation[MAX_PATH];
2295 
2296  /* make the directory a system folder */
2297  dwAttributes = GetFileAttributesW(szBuildPath);
2299  SetFileAttributesW(szBuildPath, dwAttributes);
2300 
2301  /* build the desktop.ini file path */
2302  PathAppendW(szBuildPath, L"desktop.ini");
2303 
2304  /* build the icon location */
2305  StringCchPrintfW(szIconLocation, _countof(szIconLocation), s_szFormat,
2306  CSIDL_Data[folder].nShell32IconIndex);
2307 
2308  /* write desktop.ini */
2309  WritePrivateProfileStringW(L".ShellClassInfo", L"IconResource", szIconLocation, szBuildPath);
2310 
2311  /* flush! */
2312  WritePrivateProfileStringW(NULL, NULL, NULL, szBuildPath);
2313 
2314  /* make the desktop.ini a system and hidden file */
2315  dwAttributes = GetFileAttributesW(szBuildPath);
2317  SetFileAttributesW(szBuildPath, dwAttributes);
2318  }
2319 
2320  TRACE("returning 0x%08x (final path is %s)\n", hr, debugstr_w(szBuildPath));
2321  return hr;
2322 }
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:1934
#define CSIDL_FLAG_DONT_VERIFY
Definition: shlobj.h:2064
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
static HRESULT _SHGetCurrentVersionPath(DWORD dwFlags, BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1638
#define _countof(array)
Definition: fontsub.cpp:30
static const CSIDL_DATA CSIDL_Data[]
Definition: shellpath.c:679
_In_ int nFolder
Definition: shlobj.h:1435
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:415
#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:2061
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:110
#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:1748
LONG HRESULT
Definition: typedefs.h:77
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
static HRESULT _SHGetAllUsersProfilePath(DWORD dwFlags, BYTE folder, LPWSTR pszPath)
Definition: shellpath.c:1829
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:109
#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:673
#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 2087 of file shellpath.c.

2093 {
2094  HRESULT hr = SHGetFolderPathAndSubDirW(hwndOwner, nFolder, hToken, dwFlags, NULL, pszPath);
2097  return hr;
2098 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
HRESULT hr
Definition: shlfolder.c:183
_In_ int nFolder
Definition: shlobj.h:1435
smooth NULL
Definition: ftsmooth.c:416
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
LONG HRESULT
Definition: typedefs.h:77
_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:2152

Referenced by _CDataObject_CreateInstance(), _SHRegisterFolders(), AutoStartupApplications(), BrsFolder_NewFolder(), CJournaledTestList::CJournaledTestList(), create_ie_menu(), create_profile_directory(), CreateObjectsFromPersistFolder(), DllRegisterServer(), CFontExt::Drop(), FILEDLG95_InitControls(), FillDefaultSettings(), format_filelist_filename(), CFontExt::Initialize(), LoadThemes(), OnAddStartMenuItems(), OnAdvancedStartMenuItems(), OnClearRecentItems(), RegisterTypeLibraries(), RunFontViewer(), 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 2695 of file shellpath.c.

2699 {
2701 
2702  TRACE("(%p,0x%x,%p)\n", hwndOwner,nFolder,ppidl);
2703 
2704  if (!ppidl)
2705  return E_INVALIDARG;
2706 
2707  hr = SHGetFolderLocation(hwndOwner, nFolder, NULL, 0, ppidl);
2708  return hr;
2709 }
HRESULT hr
Definition: shlfolder.c:183
_In_ int nFolder
Definition: shlobj.h:1435
#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:77
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
Definition: shellpath.c:2606

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(), 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 2561 of file shellpath.c.

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

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

◆ SHGetSpecialFolderPathW()

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

Definition at line 2574 of file shellpath.c.

2579 {
2580  return SHGetFolderPathW(hwndOwner, nFolder + (bCreate ? CSIDL_FLAG_CREATE : 0), NULL, 0,
2581  szPath) == S_OK;
2582 }
_In_ int nFolder
Definition: shlobj.h:1435
smooth NULL
Definition: ftsmooth.c:416
#define S_OK
Definition: intsafe.h:59
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1435
LPCWSTR szPath
Definition: env.c:35
#define CSIDL_FLAG_CREATE
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2087

Referenced by cache_containers_init(), CSendToMenu::CreateSendToFiles(), delhist_on_command(), CDeskLinkDropHandler::Drop(), CDesktopFolder::FinalConstruct(), CSendToMenu::FolderHasAnyItems(), get_csidl_dir(), GetStorageDirectory(), CFSFolder::InitializeEx(), InitPropertyBag_IPropertyBag_Read(), CSendToMenu::LoadAllItems(), profile_items_callback(), START_TEST(), test_FolderShortcut(), test_ITEMIDLIST_format(), test_ParseDisplayName(), test_SHCreateShellItemArray(), and test_SHGetPathFromIDList().

◆ SHPathGetExtensionW()

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

Definition at line 102 of file shellpath.c.

103 {
104  return PathGetExtensionW(lpszPath);
105 }
static LPWSTR PathGetExtensionW(LPCWSTR lpszPath)
Definition: shellpath.c:91

◆ 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 530 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 638 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 629 of file shellpath.c.

Referenced by _SHExpandEnvironmentStrings(), and _SHGetDefaultValue().

◆ AllUsersW

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

Definition at line 647 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 533 of file shellpath.c.

◆ AppDataW

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

Definition at line 531 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 534 of file shellpath.c.

◆ CacheW

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

Definition at line 536 of file shellpath.c.

◆ CD_BurningW

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

Definition at line 537 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 538 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 539 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 540 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 541 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 542 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 547 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 549 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 548 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 550 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 543 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 544 of file shellpath.c.

◆ CommonMusicW

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

Definition at line 545 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 546 of file shellpath.c.

◆ CommonVideoW

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

Definition at line 551 of file shellpath.c.

◆ ContactsW

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

Definition at line 553 of file shellpath.c.

◆ CookiesW

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

Definition at line 555 of file shellpath.c.

◆ CSIDL_Data

◆ DefaultW

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

Definition at line 628 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 556 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 558 of file shellpath.c.

◆ DownloadsW

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

Definition at line 559 of file shellpath.c.

◆ FavoritesW

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

Definition at line 561 of file shellpath.c.

◆ FontsW

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

Definition at line 562 of file shellpath.c.

◆ HistoryW

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

Definition at line 563 of file shellpath.c.

◆ is_win64

◆ LinksW

const WCHAR LinksW[] = {'L','i','n','k','s','\0'}
static

Definition at line 565 of file shellpath.c.

◆ Local_AppDataW

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

Definition at line 567 of file shellpath.c.

◆ Local_Settings_Application_DataW

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

Definition at line 569 of file shellpath.c.

◆ Local_Settings_CD_BurningW

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','