33 { CLSID_NetworkPlaces,
"ncpa.cpl", REGITEMORDER_NETHOOD },
34 { CLSID_Internet,
"inetcpl.cpl", REGITEMORDER_INTERNET },
47 return cidl == 0 || (cidl == 1 && apidl &&
_ILIsEmpty(apidl[0]));
53 return (
const CLSID*)(&pidl->mkid.abID[2]);
60 return pClass && *pClass ==
clsid;
66 ((
PIDLDATA*)pidl->mkid.abID)->type |= PT_FS_COMMON_FLAG;
73 LPOLESTR lpszDisplayName,
85 DWORD attrs = (pdwAttributes ? *pdwAttributes : 0) | SFGAO_STREAM;
88 CComPtr<IShellFolder> psfDesktop;
92 CComPtr<IBindCtx> pBindCtx;
96 BIND_OPTS BindOps = {
sizeof(BindOps) };
98 pBindCtx->SetBindOptions(&BindOps);
99 hr = psfDesktop->ParseDisplayName(hwndOwner, pBindCtx,
101 pchEaten, ppidl, &attrs);
114 CComHeapPtr<ITEMIDLIST> pidlLocation;
121 CComPtr<IShellFolder> psfFolder;
125 CComHeapPtr<ITEMIDLIST> pidlNew;
126 hr = psfFolder->ParseDisplayName(hwndOwner, pbc,
pch, pchEaten, &pidlNew, &attrs);
129 hr = SHILCombine(pidlLocation, pidlNew, ppidl);
144 *ppidl = pidlLocation.Detach();
159 *pdwAttributes = attrs;
172 LPOLESTR lpszDisplayName,
175 DWORD *pdwAttributes)
218 if (pCommon != this->
mpLast)
226 while ((pCommon = pCommon->
pNext) !=
NULL)
240 SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR |
241 SFGAO_STORAGEANCESTOR | SFGAO_HASPROPSHEET | SFGAO_STORAGE;
243 SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
244 SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK;
246 SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
247 SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK;
271 &CLSID_ShellFSFolder,
279 &CLSID_ShellFSFolder,
312 FIXME(
"Desktop is unexpected here!\n");
316 FIXME(
"Unexpected PIDL type %#x\n", pidl->mkid.abID[0]);
326 LPOLESTR lpszDisplayName,
329 DWORD *pdwAttributes)
334 CComHeapPtr<ITEMIDLIST> pidlParent;
336 WCHAR wch = *lpszDisplayName;
337 if (((
L'A' <= wch && wch <=
L'Z') || (
L'a' <= wch && wch <=
L'z')) &&
338 (lpszDisplayName[1] ==
L':'))
346 if (lpszDisplayName[2] ==
L'?' && (lpszDisplayName[3] ==
L'\\' || !lpszDisplayName[3]))
358 CComPtr<IShellFolder> pParentFolder;
361 CComHeapPtr<ITEMIDLIST> pidlChild;
362 HRESULT hr = pParentFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName,
363 pchEaten, &pidlChild, pdwAttributes);
367 *ppidl =
ILCombine(pidlParent, pidlChild);
389 CComPtr<IShellFolder> psfDesktop;
395 return psfDesktop->ParseDisplayName(hwndOwner, pbc,
szPath, pchEaten, ppidl,
423 WARN(
"We don't support 'ms-shell-rooted:' and 'ms-shell-idlist:' schemes\n");
446 LPOLESTR lpszDisplayName,
449 DWORD *pdwAttributes)
451 TRACE (
"(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
452 this, hwndOwner, pbc, lpszDisplayName,
debugstr_w(lpszDisplayName),
453 pchEaten, ppidl, pdwAttributes);
460 if (!lpszDisplayName)
463 if (!*lpszDisplayName)
469 if (lpszDisplayName[0] ==
':' && lpszDisplayName[1] ==
':')
471 return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl,
482 CComHeapPtr<ITEMIDLIST> pidlAlias;
486 *ppidl = pidlAlias.Detach();
490 TRACE (
"(%p)->(-- ret=0x%08x)\n",
this,
hr);
503 BIND_OPTS BindOps = {
sizeof(BindOps) };
507 BindOps.grfMode &= ~STGM_CREATE;
509 pbc->SetBindOptions(&BindOps);
537 pbc->SetBindOptions(&BindOps);
546 TRACE (
"(%p)->(-- ret=0x%08x)\n",
this,
hr);
556 CComPtr<IEnumIDList> pRegEnumerator;
557 CComPtr<IEnumIDList> pDesktopEnumerator;
558 CComPtr<IEnumIDList> pCommonDesktopEnumerator;
563 ERR(
"EnumObjects for reg folder failed\n");
567 ERR(
"EnumObjects for desktop fs folder failed\n");
571 ERR(
"EnumObjects for shared desktop fs folder failed\n");
573 return ShellObjectCreatorInit<CDesktopFolderEnum>(
m_regFolder,
dwFlags, pRegEnumerator, pDesktopEnumerator,
589 CComPtr<IShellFolder2> psf;
594 return psf->BindToObject(pidl, pbcReserved,
riid, ppvOut);
606 FIXME (
"(%p)->(pidl=%p,%p,%s,%p) stub\n",
618 bool bIsDesktopFolder1, bIsDesktopFolder2;
620 if (!pidl1 || !pidl2)
622 ERR(
"Got null pidl pointer (%Ix %p %p)!\n",
lParam, pidl1, pidl2);
628 if (bIsDesktopFolder1 || bIsDesktopFolder2)
650 TRACE (
"(%p)->(hwnd=%p,%s,%p)\n",
671 CComPtr<CDesktopFolderViewCB> sfviewcb;
680 TRACE (
"-- (%p)->(interface=%p)\n",
this, ppvOut);
694 TRACE(
"(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
695 this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
708 for (
UINT i = 0;
i < cidl; ++
i)
715 else if (
IsRegItem(apidl[
i], CLSID_NetworkPlaces))
719 CComPtr<IShellFolder2> psf;
724 psf->GetAttributesOf(1, &apidl[
i], rgfInOut);
727 ERR(
"Got an unknown pidl type!!!\n");
731 *rgfInOut &= ~SFGAO_VALIDATE;
733 TRACE(
"-- result=0x%08x\n", *rgfInOut);
761 TRACE (
"(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
771 CComPtr<IShellFolder2> psf;
776 return psf->GetUIObjectOf(hwndOwner, cidl, apidl,
riid, prgfInOut, ppvOut);
816 CComPtr<IShellFolder> psfChild;
821 return psfChild->CreateViewObject(
NULL,
riid, ppvOut);
830 TRACE (
"(%p)->hr=0x%08x\n",
this,
hr);
842 TRACE (
"(%p)->(pidl=%p,0x%08x,%p)\n",
this, pidl,
dwFlags, strRet);
861 CComPtr<IShellFolder2> psf;
866 return psf->GetDisplayNameOf(pidl,
dwFlags, strRet);
888 CComPtr<IShellFolder2> psf;
893 return psf->SetNameOf(hwndOwner, pidl,
lpName,
dwFlags, pPidlOut);
909 TRACE (
"(%p)\n",
this);
916 TRACE (
"(%p)\n",
this);
938 CComPtr<IShellFolder2> psf;
941 return psf->GetDetailsEx(pidl, pscid, pv);
967 CComPtr<IShellFolder2> psf;
972 hr = psf->GetDetailsOf(pidl, iColumn, psd);
993 TRACE (
"(%p)\n",
this);
998 *lpClassId = CLSID_ShellDesktop;
1005 TRACE (
"(%p)->(%p)\n",
this, pidl);
1015 TRACE (
"(%p)->(%p)\n",
this, pidl);
1062 enum { Uninitialized = 0, NotHosted, IsHosted };
1071 const CLSID* pClsid;
1075 LPCWSTR SubKey = NewStart ?
L"HideDesktopIcons\\NewStartPanel" :
L"HideDesktopIcons\\ClassicStartMenu";
1085 #if ROSPOLICY_DESKTOPFOLDER_DEFLARGEICONS
1116 TRACE(
"-- %p->(%p)\n",psf, *psf);
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
static const REGFOLDERINFO g_RegFolderInfo
static const CLSID * IsRegItem(LPCITEMIDLIST pidl)
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT WINAPI IEParseDisplayNameWithBCW(DWORD codepage, LPCWSTR lpszDisplayName, LPBC pbc, LPITEMIDLIST *ppidl)
static const DWORD dwMyComputerAttributes
static const CLSID * IsRegItem(PCUITEMID_CHILD pidl)
BOOL SHELL32_IsShellFolderNamespaceItemHidden(LPCWSTR SubKey, REFCLSID Clsid)
Returns true if the item should be hidden in DefView but not in the Explorer folder tree.
static const REGFOLDERINFO g_RegFolderInfo
static BOOL IsSelf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl)
static const DWORD dwDesktopAttributes
static DWORD dwMyNetPlacesAttributes
static void MarkAsCommonItem(LPITEMIDLIST pidl)
int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll)
static const REQUIREDREGITEM g_RequiredItems[]
static HRESULT SHELL32_CoCreateInitSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidlChild, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, BOOL bExtendedObject, IDataObject **dataObject)
HRESULT CRegFolder_CreateInstance(PREGFOLDERINITDATA pInit, LPCITEMIDLIST pidlRoot, REFIID riid, void **ppv)
#define IID_PPV_ARG(Itype, ppType)
#define SFVM_GETCOMMANDDIR
struct mke2fs_defaults settings[]
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void shell(int argc, const char *argv[])
HRESULT WINAPI Initialize(IShellFolder *pRegFolder, SHCONTF dwFlags, IEnumIDList *pRegEnumerator, IEnumIDList *pDesktopEnumerator, IEnumIDList *pCommonDesktopEnumerator)
bool IsProgmanHostedBrowser()
STDMETHOD() MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override
IShellView * m_pShellView
STDMETHOD() ShouldShow(IShellFolder *psf, PCIDLIST_ABSOLUTE pidlFolder, PCUITEMID_CHILD pidlItem) override
STDMETHOD() GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
CComPtr< IShellFolder2 > m_SharedDesktopFSFolder
STDMETHOD() BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
HRESULT WINAPI FinalConstruct()
STDMETHOD() Initialize(PCIDLIST_ABSOLUTE pidl) override
STDMETHOD() GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
STDMETHOD() CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
static BOOL IsCommonItem(LPCITEMIDLIST pidl)
STDMETHOD() GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) override
STDMETHOD() SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
STDMETHOD() GetDefaultSearchGUID(GUID *pguid) override
STDMETHOD() CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() MapColumnToSCID(UINT column, SHCOLUMNID *pscid) override
STDMETHOD() GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
STDMETHOD() BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) override
HRESULT _GetSFFromPidl(LPCITEMIDLIST pidl, IShellFolder2 **psf)
CComPtr< IShellFolder2 > m_DesktopFSFolder
STDMETHODIMP HttpUrlParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
STDMETHOD() ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override
STDMETHOD() GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
STDMETHOD() GetCurFolder(PIDLIST_ABSOLUTE *pidl) override
STDMETHOD() GetClassID(CLSID *lpClassId) override
STDMETHOD() EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
STDMETHOD() EnumSearches(IEnumExtraSearch **ppenum) override
STDMETHOD() GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
CComPtr< IShellFolder2 > m_regFolder
STDMETHODIMP ShellUrlParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
STDMETHOD() GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
HRESULT _ParseDisplayNameByParent(HWND hwndOwner, LPBC pbc, LPOLESTR pszPath, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
static HRESULT GetColumnDetails(UINT iColumn, SHELLDETAILS &sd)
HRESULT AppendItemsFromEnumerator(IEnumIDList *pEnum)
static HRESULT GetDefaultFSColumnState(UINT iColumn, SHCOLSTATEF &csFlags)
static HRESULT GetFSColumnDetails(UINT iColumn, SHELLDETAILS &sd)
void pdump(LPCITEMIDLIST pidl)
const char * shdebugstr_guid(const struct _GUID *id)
#define SHCIDS_CANONICALONLY
#define DFM_MERGECONTEXTMENU
#define DFM_INVOKECOMMAND
HRESULT WINAPI ParseURLW(const WCHAR *url, PARSEDURLW *result)
BOOL WINAPI PathIsUNCW(const WCHAR *path)
HRESULT WINAPI PathCreateFromUrlW(const WCHAR *url, WCHAR *path, DWORD *pcchPath, DWORD dwReserved)
BOOL WINAPI UrlIsW(const WCHAR *url, URLIS Urlis)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
SHSTDAPI SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
#define SHELL_ExecuteControlPanelCPL(hwnd, cpl)
EXTERN_C INT Shell_ParseSpecialFolder(_In_ LPCWSTR pszStart, _Out_ LPWSTR *ppch, _Out_ INT *pcch)
BOOL BindCtx_ContainsObject(_In_ IBindCtx *pBindCtx, _In_ LPCWSTR pszName)
EXTERN_C HRESULT SHGetNameAndFlagsW(_In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_opt_ LPWSTR pszText, _In_ UINT cchBuf, _Inout_opt_ DWORD *pdwAttributes)
HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW *pFindData)
BOOL Shell_FailForceReturn(_In_ HRESULT hr)
HRESULT SHELL32_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdo, UINT msg)
PIDLIST_ABSOLUTE SHELL_DataObject_ILCloneFullItem(_In_ IDataObject *pDO, _In_ UINT Index)
BOOL SHSkipJunctionBinding(_In_ IBindCtx *pbc, _In_ CLSID *pclsid)
HRESULT SHELL32_ShowPropertiesDialog(IDataObject *pdtobj)
EXTERN_C HRESULT SHELL32_AliasTranslatePidl(_In_ LPCITEMIDLIST pidl, _Out_ LPITEMIDLIST *ppidlNew, _In_ DWORD dwFlags)
Translate a PIDL to an "alias" PIDL.
LPVOID WINAPI SHAlloc(SIZE_T len)
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
#define FAILED_UNEXPECTEDLY
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
GLenum GLuint GLenum GLsizei const GLchar * buf
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
HRESULT GetCurrentInfo([out] LPFOLDERSETTINGS lpfs)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define COM_INTERFACE_ENTRY_IID(iid, x)
#define REGITEMORDER_MYCOMPUTER
#define ERROR_FILE_NOT_FOUND
static const struct access_res create[16]
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
interface IBindCtx * LPBC
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
const GUID IID_IDataObject
LPITEMIDLIST _ILCreateMyComputer(void)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
LPITEMIDLIST _ILCreateDesktop(void)
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
LPITEMIDLIST _ILCreateNetwork(void)
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
static BYTE _ILGetFSType(LPCITEMIDLIST pidl)
static BOOL _ILIsEmpty(LPCITEMIDLIST pidl)
#define IsEqualIID(riid1, riid2)
@ URL_SCHEME_MSSHELLROOTED
@ URL_SCHEME_MSSHELLIDLIST
HMENU WINAPI CreatePopupMenu(void)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MAKEINTRESOURCEW(i)
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
#define MAKE_COMPARE_HRESULT(x)
#define SHELL_GetSetting(pss, ssf, field)
#define IS_SHGDN_DESKTOPABSOLUTEPARSING(flags)
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
void AddFSClassKeysToArray(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, HKEY *array, UINT *cKeys)
LSTATUS AddClsidKeyToArray(REFCLSID clsid, HKEY *array, UINT *cKeys)
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
#define CSIDL_COMMON_DESKTOPDIRECTORY
_In_ int _In_ BOOL bCreate
#define CSIDL_DESKTOPDIRECTORY
#define CSIDL_FLAG_CREATE
#define DFM_CMD_PROPERTIES
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define ERROR_PATH_NOT_FOUND