47 L"shell32.dll,Control_RunDLL sysdm.cpl",
59 L"shell32.dll,Control_RunDLL desk.cpl",
72 L"::{7007ACC7-3202-11D1-AAD2-00805FC1270E}",
123 CComPtr<IDefaultExtractIconInit> initIcon;
136 return initIcon->QueryInterface(iid, ppvOut);
144 static const WCHAR fmt[] = {
'C',
'L',
'S',
'I',
'D',
'\\',
145 '{',
'%',
'0',
'8',
'l',
'x',
'-',
'%',
'0',
'4',
'x',
'-',
'%',
'0',
'4',
'x',
'-',
146 '%',
'0',
'2',
'x',
'%',
'0',
'2',
'x',
'-',
'%',
'0',
'2',
'x',
'%',
'0',
'2',
'x',
147 '%',
'0',
'2',
'x',
'%',
'0',
'2',
'x',
'%',
'0',
'2',
'x',
'%',
'0',
'2',
'x',
'}', 0
159 static const WCHAR szFull[] = {
'F',
'u',
'l',
'l',0};
161 CComPtr<IEnumIDList> EnumIDList;
164 CComPtr<IShellFolder2> psfRecycleBin;
165 CComPtr<IShellFolder> psfDesktop;
171 hr = psfRecycleBin->EnumObjects(
NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &EnumIDList);
186 initIcon->SetNormalIcon(wTemp, icon_idx);
200 return initIcon->QueryInterface(iid, ppvOut);
228 static const WCHAR KeyNameFormat[] =
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\%s\\Namespace";
230 if (!(
dwFlags & SHCONTF_FOLDERS))
251 for (
int idx = 0; ;
idx++)
278 public CComObjectRootEx<CComMultiThreadModelNoCS>,
365 *pdwAttributes |= (
dwAttributes & (SFGAO_CANLINK|SFGAO_CANDELETE|SFGAO_CANRENAME|SFGAO_HASPROPSHEET));
369 if (*pdwAttributes ==
NULL)
381 if (!lpszDisplayName || !ppidl)
390 if (
cch < 39 || lpszDisplayName[0] !=
L':' || lpszDisplayName[1] !=
L':')
400 if (pdwAttributes && *pdwAttributes)
425 CComPtr<IPersistFolder> pFolder;
428 if (!ppvOut || !pidl || !pidl->mkid.cb)
436 ERR(
"CRegFolder::BindToObject called for non guid item!\n");
454 if (!pidl1 || !pidl2 || pidl1->mkid.cb == 0 || pidl2->mkid.cb == 0)
456 ERR(
"Got an empty pidl!\n");
463 if (!clsid1 && !clsid2)
465 ERR(
"Got no guid pidl!\n");
468 else if (clsid1 && clsid2)
470 if (
memcmp(clsid1, clsid2,
sizeof(
GUID)) == 0)
495 if (!rgfInOut || !cidl || !apidl)
501 while(cidl > 0 && *apidl)
506 ERR(
"Got an unkown pidl here!\n");
512 *rgfInOut &= ~SFGAO_VALIDATE;
536 ERR(
"Got non guid item!\n");
561 if (!pidl || !pidl->mkid.cb)
587 return SHSetStrRet(strRet, wstrName);
599 int bWantsForParsing =
FALSE;
610 bWantsForParsing =
TRUE;
623 if (bWantsForParsing)
680 ERR(
"Pidl is not reg item!\n");
688 swprintf(
szName,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\%s", pStr);
747 ERR(
"Pidl is not reg item!\n");
756 return SHSetStrRet(&psd->
str,
"");
766 return SHSetStrRet(&psd->
str,
"");
787 return ShellObjectCreatorInit<CRegFolder>(pGuid, pidlRoot, lpszPath, lpszEnumKeyName,
riid,
ppv);
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
DWORD WINAPI SHSetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD dwType, LPCVOID pvData, DWORD cbData)
HRESULT CALLBACK RegFolderContextMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid)
virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
interface IBindCtx * LPBC
#define GET_SHGDN_RELATION(dwFlags)
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
BOOL _ILIsNetHood(LPCITEMIDLIST pidl)
HRESULT Initialize(LPCWSTR lpszEnumKeyName, DWORD dwFlags)
BOOL AddToEnumList(LPITEMIDLIST pidl)
#define HKEY_CURRENT_USER
WINE_DEFAULT_DEBUG_CHANNEL(shell)
BOOL HCR_GetIconW(LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
ITEMID_CHILD UNALIGNED * PUITEMID_CHILD
void AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
WCHAR swShell32Name[MAX_PATH]
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
#define DECLARE_NOT_AGGREGATABLE(x)
const GUID IID_IDataObject
#define MAKE_COMPARE_HRESULT(x)
HRESULT SHELL32_BindToSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
#define IID_PPV_ARG(Itype, ppType)
BOOL SH_ShowRecycleBinProperties(WCHAR sDrive)
virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum)
#define IDI_SHELL_DESKTOP
LONG WINAPI RegCloseKey(HKEY hKey)
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
static BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
HRESULT GetGuidItemAttributes(LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
virtual HRESULT WINAPI BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
#define GET_SHGDN_FOR(dwFlags)
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
virtual HRESULT WINAPI GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
BOOL _ILIsBitBucket(LPCITEMIDLIST pidl)
HRESULT SH_GetApidlFromDataObject(IDataObject *pDataObject, PIDLIST_ABSOLUTE *ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl)
static DWORD DWORD void LPSTR DWORD cch
#define DFM_INVOKECOMMAND
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, BOOL bExtendedObject, IDataObject **dataObject)
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
HRESULT AddItemsFromKey(HKEY hkey_root, LPCWSTR szRepPath)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
HRESULT SHELL32_ParseNextElement(IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
CStringT< wchar_t, StrTraitATL< wchar_t, ChTraitsCRT< wchar_t > > > CAtlStringW
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
static const WCHAR szEmpty[]
HRESULT CRegFolder_CreateInstance(const GUID *pGuid, LPCITEMIDLIST pidlRoot, LPCWSTR lpszPath, LPCWSTR lpszEnumKeyName, REFIID riid, void **ppv)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
#define IDI_SHELL_MY_COMPUTER
virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
#define FAILED_UNEXPECTEDLY(hr)
#define DFM_CMD_PROPERTIES
virtual HRESULT WINAPI GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
unsigned __int3264 UINT_PTR
static __inline int SHELL32_GUIDToStringW(REFGUID guid, LPWSTR str)
HRESULT CGuidItemContextMenu_CreateInstance(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, IContextMenu **ppcm)
CComHeapPtr< ITEMIDLIST > m_pidlRoot
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
#define memcpy(s1, s2, n)
virtual HRESULT WINAPI ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten, PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes)
#define IDI_SHELL_MY_NETWORK_PLACES
virtual HRESULT WINAPI BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
HRESULT CGuidItemExtractIcon_CreateInstance(LPCITEMIDLIST pidl, REFIID iid, LPVOID *ppvOut)
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
#define IDI_SHELL_MY_DOCUMENTS
void shell(int argc, const char *argv[])
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
#define COM_INTERFACE_ENTRY_IID(iid, x)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
virtual HRESULT WINAPI CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
void WINAPI SHFree(LPVOID pv)
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
static const WCHAR szName[]
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
virtual HRESULT WINAPI GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut)
BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD pdwAttributes)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
LONG WINAPI RegLoadMUIStringA(IN HKEY hKey, IN LPCSTR pszValue OPTIONAL, OUT LPSTR pszOutBuf, IN DWORD cbOutBuf, OUT LPDWORD pcbData OPTIONAL, IN DWORD Flags, IN LPCSTR pszDirectory OPTIONAL)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
virtual HRESULT WINAPI GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
#define IsEqualIID(riid1, riid2)
HRESULT WINAPI Initialize(const GUID *pGuid, LPCITEMIDLIST pidlRoot, LPCWSTR lpszPath, LPCWSTR lpszEnumKeyName)
CAtlStringW m_enumKeyName
BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len)
#define HKEY_LOCAL_MACHINE
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
GLuint const GLchar * name