62 L"::{7007ACC7-3202-11D1-AAD2-00805FC1270E}",
110 CComPtr<IShellFolder> pOuterSF;
113 SFGAOF att = (psf && cidl) ?
SHGetAttributes(pOuterSF ? pOuterSF.p : psf, apidl[0], SFGAO_FOLDER) : 0;
114 if (att & SFGAO_FOLDER)
132 CComPtr<IDefaultExtractIconInit> initIcon;
156 CComPtr<IEnumIDList> EnumIDList;
159 CComPtr<IShellFolder2> psfRecycleBin;
160 CComPtr<IShellFolder> psfDesktop;
166 hr = psfRecycleBin->EnumObjects(
NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &EnumIDList);
183 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\%s",
203 initIcon->SetNormalIcon(wTemp, icon_idx);
208 WARN(
"Failed to load an icon for the item, setting blank icon\n");
212 return initIcon->QueryInterface(iid, ppvOut);
241 if (!(
dwFlags & SHCONTF_FOLDERS))
245 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\%s\\Namespace",
264 for (
int idx = 0; ;
idx++)
303 public CComObjectRootEx<CComMultiThreadModelNoCS>,
392 *pdwAttributes |= (
dwAttributes & (SFGAO_CANLINK|SFGAO_CANDELETE|SFGAO_CANRENAME|SFGAO_HASPROPSHEET));
407 FIXME(
"Check registry\n");
419 if (!lpszDisplayName)
422 if (lpszDisplayName[0] !=
L':' || lpszDisplayName[1] !=
L':')
424 FIXME(
"What should we do here?\n");
429 for (
pch = &lpszDisplayName[2]; *
pch && *
pch !=
L'\\'; ++
pch)
431 if (*
pch ==
L',' && !pchNextOfComma)
432 pchNextOfComma =
pch + 1;
441 FIXME(
"Delegate folder\n");
452 *ppidl = pidlTemp.Detach();
456 if (pdwAttributes && *pdwAttributes)
479 CComPtr<IPersistFolder> pFolder;
482 if (!ppvOut || !pidl || !pidl->mkid.cb)
490 ERR(
"CRegFolder::BindToObject called for non guid item!\n");
508 if (!pidl1 || !pidl2 || pidl1->mkid.cb == 0 || pidl2->mkid.cb == 0)
510 ERR(
"Got an empty pidl!\n");
517 if (!clsid1 && !clsid2)
519 ERR(
"Got no guid pidl!\n");
522 else if (clsid1 && clsid2)
524 if (
memcmp(clsid1, clsid2,
sizeof(
GUID)) == 0)
549 if (!rgfInOut || !cidl || !apidl)
555 while(cidl > 0 && *apidl)
560 ERR(
"Got unknown pidl\n");
566 *rgfInOut &= ~SFGAO_VALIDATE;
590 ERR(
"Got non guid item!\n");
615 if (!pidl || !pidl->mkid.cb)
642 return SHSetStrRet(strRet, wstrName);
653 int bWantsForParsing =
FALSE;
664 bWantsForParsing =
TRUE;
677 if (bWantsForParsing)
698 PWCHAR pItemName = pszPath;
704 pathlen =
wcslen(pszPath);
705 pItemName = &pszPath[pathlen];
708 if (++pathlen < cchPath)
709 *pItemName++ =
L'\\';
716 if (
SUCCEEDED(
hr) && pathlen + 2 + 38 + 1 < cchPath)
758 ERR(
"Pidl is not reg item!\n");
766 swprintf(
szName,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\%s", pStr);
822 TRACE(
"CRegFolder has no column info\n");
830 ERR(
"Pidl is not reg item!\n");
843 return SHSetStrRet(&psd->
str,
"");
854 return SHSetStrRet(&psd->
str,
"");
867 return ShellObjectCreatorInit<CRegFolder>(pGuid, pidlRoot, lpszPath, lpszEnumKeyName,
riid,
ppv);
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, BOOL bExtendedObject, IDataObject **dataObject)
HRESULT CRegFolder_CreateInstance(const GUID *pGuid, LPCITEMIDLIST pidlRoot, LPCWSTR lpszPath, LPCWSTR lpszEnumKeyName, REFIID riid, void **ppv)
HRESULT CALLBACK RegFolderContextMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
HRESULT CGuidItemExtractIcon_CreateInstance(LPCITEMIDLIST pidl, REFIID iid, LPVOID *ppvOut)
HRESULT FormatGUIDKey(LPWSTR KeyName, SIZE_T KeySize, LPCWSTR RegPath, const GUID *riid)
HRESULT CGuidItemContextMenu_CreateInstance(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, IContextMenu **ppcm)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void shell(int argc, const char *argv[])
#define RegCloseKey(hKey)
BOOL AddToEnumList(LPITEMIDLIST pidl)
HRESULT Initialize(LPCWSTR lpszEnumKeyName, DWORD dwFlags)
HRESULT AddItemsFromKey(HKEY hkey_root, LPCWSTR szRepPath)
STDMETHOD() EnumSearches(IEnumExtraSearch **ppenum) override
STDMETHOD() MapColumnToSCID(UINT column, SHCOLUMNID *pscid) override
STDMETHOD() GetDefaultSearchGUID(GUID *pguid) override
BOOL _IsInNameSpace(_In_ LPCITEMIDLIST pidl)
STDMETHOD() CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
STDMETHOD() GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
CAtlStringW m_enumKeyName
STDMETHOD() CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
STDMETHOD() GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
CComHeapPtr< ITEMIDLIST > m_pidlRoot
STDMETHOD() ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten, PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes) override
STDMETHOD() GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) override
STDMETHOD() BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
STDMETHOD() GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
STDMETHOD() GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
HRESULT GetGuidItemAttributes(LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
STDMETHOD() GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
STDMETHOD() GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
HRESULT WINAPI Initialize(const GUID *pGuid, LPCITEMIDLIST pidlRoot, LPCWSTR lpszPath, LPCWSTR lpszEnumKeyName)
STDMETHOD() BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
#define ERROR_INSUFFICIENT_BUFFER
#define GET_SHGDN_RELATION(dwFlags)
#define DFM_INVOKECOMMAND
#define GET_SHGDN_FOR(dwFlags)
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
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)
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
#define FAILED_UNEXPECTEDLY(hr)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
#define SHELL_ExecuteControlPanelCPL(hwnd, cpl)
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
DWORD BindCtx_GetMode(_In_ IBindCtx *pbc, _In_ DWORD dwDefault)
EXTERN_C HRESULT SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
HRESULT SHELL32_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdo, UINT msg)
HRESULT SHILClone(_In_opt_ LPCITEMIDLIST pidl, _Outptr_ LPITEMIDLIST *ppidl)
void WINAPI SHFree(LPVOID pv)
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
DWORD WINAPI SHSetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD dwType, LPCVOID pvData, DWORD cbData)
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
static BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
WCHAR swShell32Name[MAX_PATH]
VOID WINAPI CoTaskMemFree(LPVOID ptr)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define COM_INTERFACE_ENTRY_IID(iid, x)
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
#define DECLARE_NOT_AGGREGATABLE(x)
#define memcpy(s1, s2, n)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static IParseDisplayName ParseDisplayName
unsigned __int3264 UINT_PTR
interface IBindCtx * LPBC
const GUID IID_IDataObject
BOOL WINAPI GUIDFromStringW(_In_ PCWSTR psz, _Out_ LPGUID pguid)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
BOOL _ILIsBitBucket(LPCITEMIDLIST pidl)
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
BOOL _ILIsNetHood(LPCITEMIDLIST pidl)
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
static const WCHAR szName[]
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
BOOL SH_ShowRecycleBinProperties(WCHAR sDrive)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len)
BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD pdwAttributes)
BOOL HCR_GetIconW(LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
#define MAKE_COMPARE_HRESULT(x)
HRESULT SHELL32_BindToSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
#define SHFSF_COL_COMMENT
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
#define IS_SHGDN_FOR_PARSING(flags)
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
static __inline int SHELL32_GUIDToStringW(REFGUID guid, LPWSTR str)
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
HRESULT SH_GetApidlFromDataObject(IDataObject *pDataObject, PIDLIST_ABSOLUTE *ppidlfolder, PUITEMID_CHILD **apidlItems, UINT *pcidl)
BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
HRESULT SHELL32_ParseNextElement(IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
#define DFM_CMD_PROPERTIES
#define IDI_SHELL_DESKTOP
#define IDI_SHELL_DOCUMENT
ITEMIDLIST UNALIGNED * LPITEMIDLIST
ITEMID_CHILD UNALIGNED * PUITEMID_CHILD
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define HRESULT_FROM_WIN32(x)
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define IID_PPV_ARG(Itype, ppType)