145 m_bGroupPolicyActive(0),
175 if (!pdcm->
pcmcb && !lpfn)
177 ERR(
"CDefaultContextMenu needs a callback!\n");
210 ERR(
"GetCurFolder failed\n");
238 if (
info.Verb.CompareNoCase(szVerb) == 0)
291 TRACE(
"pDataObj=%p\n", pDataObj.
p);
295 bRet =
SUCCEEDED(pDataObj->QueryGetData(&formatetc));
365 TRACE(
"RegOpenKeyExW failed\n");
391 ERR(
"CLSIDFromString failed for clsid %S hr 0x%x\n", pwszClsid,
hr);
398 L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",
405 ERR(
"Shell extension %s not approved!\n", pwszClsid);
412 WARN(
"Failed to get context menu entires from shell extension! clsid: %S\n", pwszClsid);
432 HRESULT hr =
info.pCM->QueryContextMenu(hMenu, *pIndexMenu, idCmdFirst + cIds, idCmdLast,
uFlags);
435 info.iIdCmdFirst = cIds;
437 (*pIndexMenu) +=
info.NumIds;
440 if (idCmdFirst + cIds >= idCmdLast)
443 TRACE(
"pEntry hr %x contextmenu %p cmdfirst %x num ids %x\n",
hr,
info.pCM.p,
info.iIdCmdFirst,
info.NumIds);
482 if (
info.Verb.CompareNoCase(
L"open") == 0)
488 else if (
info.Verb.CompareNoCase(
L"explore") == 0)
490 else if (
info.Verb.CompareNoCase(
L"runas") == 0)
492 else if (
info.Verb.CompareNoCase(
L"edit") == 0)
494 else if (
info.Verb.CompareNoCase(
L"find") == 0)
496 else if (
info.Verb.CompareNoCase(
L"print") == 0)
498 else if (
info.Verb.CompareNoCase(
L"printto") == 0)
523 ERR(
"Failed to load string\n");
539 DWORD cbVerb =
sizeof(wszVerb);
558 mii.
wID = iIdCmdFirst + cIds;
564 if (mii.
wID >= iIdCmdLast)
596 ERR(
"failed to load string %p\n", dwTypeData);
620 UINT idCmdNext = idCmdFirst;
623 TRACE(
"BuildShellItemContextMenu entered\n");
636 idCmdNext = idCmdFirst + cIds;
642 idCmdNext = idCmdFirst + cIds;
646 QCMINFO qcminfo = {hMenu, IndexMenu, idCmdNext, idCmdLast,
NULL};
654 idCmdNext = idCmdFirst + cIds;
657 if (
uFlags & CMF_VERBSONLY)
665 SFGAOF rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER;
671 HMENU hmenuDefault =
LoadMenu(_AtlBaseModule.GetResourceInstance(),
L"MENU_SHV_FILE");
674 if (!(rfg & SFGAO_CANMOVE))
676 if (!(rfg & SFGAO_CANCOPY))
680 if (!(rfg & SFGAO_CANLINK))
682 if (!(rfg & SFGAO_CANDELETE))
684 if (!(rfg & SFGAO_CANRENAME))
686 if (!(rfg & SFGAO_HASPROPSHEET))
691 cIds += idMax - idCmdNext;
708 FORMATETC formatetc2;
714 if (
SUCCEEDED(pda->GetData(&formatetc2, &medium2)))
719 if (*pdwFlag == DROPEFFECT_COPY)
726 ERR(
"No drop effect obtained\n");
796 STGMEDIUM medium = {0};
797 medium.tymed = TYMED_HGLOBAL;
801 *pdwFlag = bCopy ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
826 hr = psb->QueryActiveShellView(&lpSV);
830 SVSIF selFlags = SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT;
831 hr = lpSV->SelectItem(
m_apidl[0], selFlags);
866 ERR(
"m_pDataObj is NULL\n");
904 WCHAR wszNewFolder[25];
946 hr = psv->SelectItem(pidlNewItem, SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE |
947 SVSI_FOCUSED | SVSI_SELECT);
963 if (idCmd >=
info.iIdCmdFirst +
info.NumIds)
966 if (idCmd < info.iIdCmdFirst || idCmd >
info.iIdCmdFirst +
info.NumIds)
1047 if (
SUCCEEDED(psb->GetControlWindow(FCW_TREE, &hwndTree)) && hwndTree)
1048 FlagsName =
L"ExplorerFlags";
1050 FlagsName =
L"BrowserFlags";
1088 if (pidlFull ==
NULL)
1109 sei.
cbSize =
sizeof(sei);
1184 memcpy(&LocalInvokeInfo, lpcmi,
min(
sizeof(LocalInvokeInfo), lpcmi->
cbSize));
1227 ERR(
"Unable to add OFFSET to DataObject!\n");
1291 if (
uFlags == GCS_HELPTEXTA ||
1292 uFlags == GCS_HELPTEXTW ||
1307 idCommand -=
pEntry->iIdCmdFirst;
1308 return pEntry->pCM->GetCommandString(idCommand,
1318 if (
uFlags == GCS_VALIDATEA ||
uFlags == GCS_VALIDATEW)
1356 if (
uFlags == GCS_VALIDATEA ||
uFlags == GCS_VALIDATEW)
1391 *CmdId = pDrawStruct->
itemID;
1397 *CmdId = pMeasureStruct->
itemID;
1409 pDrawStruct->
itemID = CmdId;
1415 pMeasureStruct->
itemID = CmdId;
1475 return m_site->QueryInterface(
riid, ppvSite);
1482 return ShellObjectCreatorInit<CDefaultContextMenu>(pdcm, lpfn,
riid,
ppv);
1521 const HKEY *ahkeyClsKeys,
1533 dcm.
aKeys = ahkeyClsKeys;
HRESULT CRecyclerDropTarget_CreateInstance(REFIID riid, LPVOID *ppvOut)
#define shell32_hInstance
int strcmp(const char *String1, const char *String2)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define STDMETHODCALLTYPE
#define RegCloseKey(hKey)
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
LONG RegLoadMUIStringW(IN HKEY hKey, IN LPCWSTR pszValue OPTIONAL, OUT LPWSTR pszOutBuf, IN DWORD cbOutBuf, OUT LPDWORD pcbData OPTIONAL, IN DWORD Flags, IN LPCWSTR pszDirectory OPTIONAL)
#define DFM_MERGECONTEXTMENU
#define DFM_INVOKECOMMAND
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
#define HeapFree(x, y, z)
HRESULT WINAPI OleSetClipboard(IDataObject *data)
HRESULT WINAPI OleGetClipboard(IDataObject **obj)
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
HRESULT WINAPI Shell_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdtobj)
void WINAPI SHFree(LPVOID pv)
HRESULT WINAPI SHCoCreateInstance(LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID refiid, LPVOID *ppv)
BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR buffer, LPCWSTR path, LPCWSTR shortname, LPCWSTR longname)
BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj, DWORD grfKeyState, PPOINTL lpPt, DWORD *pdwEffect)
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
#define MAKE_HRESULT(sev, fac, code)
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
#define InitFormatEtc(fe, cf, med)
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
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define COM_INTERFACE_ENTRY_IID(iid, x)
#define memcpy(s1, s2, n)
const IID IID_IObjectWithSite
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
unsigned __int3264 UINT_PTR
PITEMID_CHILD * _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST *ppidl, DWORD *attributes)
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
HRESULT WINAPI SHForwardContextMenuMsg(IUnknown *pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pResult, BOOL useIContextMenu2)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static __inline const char * wine_dbgstr_guid(const GUID *id)
#define SEE_MASK_CLASSKEY
#define FAILED_UNEXPECTEDLY(hr)
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
int WINAPI SHCreateDirectory(HWND hWnd, LPCWSTR path)
#define SID_IShellBrowser
#define CFSTR_SHELLIDLIST
#define CFSTR_PREFERREDDROPEFFECT
#define DFM_CMD_PROPERTIES
HRESULT(CALLBACK * LPFNDFMCALLBACK)(_In_opt_ IShellFolder *, _In_opt_ HWND, _In_opt_ IDataObject *, UINT, WPARAM, LPARAM)
#define PathRemoveFileSpec
#define FCIDM_SHVIEW_OPEN
#define FCIDM_SHVIEW_UNDO
#define FCIDM_SHVIEW_COPY
#define FCIDM_SHVIEW_INSERTLINK
#define FCIDM_SHVIEW_NEWFOLDER
#define FCIDM_SHVIEW_EXPLORE
#define FCIDM_SHVIEW_PROPERTIES
#define FCIDM_SHVIEW_COPYTO
#define FCIDM_SHVIEW_MOVETO
#define FCIDM_SHVIEW_DELETE
#define FCIDM_SHVIEW_RENAME
#define FCIDM_SHVIEW_CREATELINK
#define FCIDM_SHVIEW_INSERT
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
CComPtr< IContextMenu > pCM
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
_In_ DWORD _Out_ _In_ WORD wFlags
#define HKEY_LOCAL_MACHINE
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MAKEINTRESOURCEA(i)
BOOL WINAPI DestroyMenu(_In_ HMENU)
SHORT WINAPI GetAsyncKeyState(_In_ int)
BOOL WINAPI InsertMenuItemW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
#define IID_PPV_ARG(Itype, ppType)
#define IID_NULL_PPV_ARG(Itype, ppType)