53 #define COLUMN_DELFROM 1 54 #define COLUMN_DATEDEL 2 57 #define COLUMN_MTIME 5 59 #define COLUMNS_COUNT 6 67 CComPtr<IDefaultExtractIconInit> initIcon;
75 return initIcon->QueryInterface(
riid, ppvOut);
95 public CComObjectRootEx<CComMultiThreadModelNoCS>,
140 ERR(
"GetDeletedFileDetailsW failed\n");
156 ERR(
"GetDeletedFileDetailsW failed\n");
179 return (PIDLRecycleStruct*) & (
pdata->u.crecycle);
197 ERR(
"GetEnvironmentVariableW failed\n");
202 if (
dwFlags & SHCONTF_NONFOLDERS)
204 TRACE(
"Starting Enumeration\n");
208 WARN(
"Error: EnumerateCRecycleBinW failed\n");
223 PIDLRecycleStruct *
p;
224 int size0 = (
char*)&tmp.u.crecycle.szName - (
char*)&tmp.u.crecycle;
234 pidl->mkid.cb =
size + 2;
235 memcpy(pidl->mkid.abID, &tmp, 2 + size0);
237 p = &((
PIDLDATA*)pidl->mkid.abID)->u.crecycle;
240 *(
WORD*)((
char*)pidl + (
size + 2)) = 0;
246 return static_cast<CRecycleBinEnum *>(
Context)->CBEnumRecycleBin(hDeletedFile);
262 ERR(
"GetDeletedFileDetailsW failed\n");
278 ERR(
"GetDeletedFileDetailsW failed\n");
324 WCHAR szBuffer[30] = {0};
327 TRACE(
"(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",
this, hMenu, indexMenu, idCmdFirst, idCmdLast,
uFlags);
365 TRACE(
"(%p)->(invcom=%p verb=%p wnd=%p)\n",
this, lpcmi, lpcmi->
lpVerb, lpcmi->
hwnd);
374 ERR(
"GetEnvironmentVariableW failed\n");
399 FIXME(
"implement cut\n");
404 FIXME(
"implement properties\n");
413 TRACE(
"(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",
this, idCommand,
uFlags, lpReserved, lpszName, uMaxNameLen);
420 TRACE(
"CRecycleBin_IContextMenu2Item_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",
this, uMsg,
wParam,
lParam);
441 TRACE(
"(%p, %p)\n",
this, pClassID);
442 if (pClassID ==
NULL)
444 memcpy(pClassID, &CLSID_RecycleBin,
sizeof(
CLSID));
454 if (this->pidl ==
NULL)
472 ULONG *pdwAttributes)
527 diff = pData1->FileSize.QuadPart - pData2->FileSize.QuadPart;
543 CComPtr<IShellView> pShellView;
569 TRACE (
"-- (%p)->(interface=%p)\n",
this,
ppv);
577 TRACE(
"(%p, %d, {%p, ...}, {%x})\n",
this, cidl, apidl ? apidl[0] :
NULL, (
unsigned int)*rgfInOut);
578 *rgfInOut &= SFGAO_FOLDER|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANLINK;
588 TRACE (
"(%p)->(%p,%u,apidl=%p, %p %p)\n",
this,
589 hwndOwner, cidl, apidl, prgfInOut,
ppv);
598 hr = ShellObjectCreatorInit<CRecycleBinItemContextMenu>(apidl[0],
riid, &pObj);
611 TRACE (
"(%p)->hr=0x%08x\n",
this,
hr);
617 PIDLRecycleStruct *pFileDetails;
630 pFileName =
wcsrchr(pFileDetails->szName,
L'\\');
668 TRACE(
"(%p, %x, %p, %p)\n",
this, (
unsigned int)
dwReserved, pSort, pDisplay);
678 TRACE(
"(%p, %d, %p)\n",
this, iColumn, pcsFlags);
713 PIDLRecycleStruct * pFileDetails;
719 TRACE(
"(%p, %p, %d, %p)\n",
this,
pidl, iColumn, pDetails);
737 pszBackslash =
wcsrchr(pFileDetails->szName,
L'\\');
738 Length = (pszBackslash - pFileDetails->szName);
768 return SHSetStrRet(&pDetails->
str,
buffer);
773 TRACE(
"(%p, %d, %p)\n",
this, iColumn, pscid);
783 CComPtr<IEnumIDList> spEnumFiles;
787 CComHeapPtr<ITEMIDLIST> spPidl;
789 return spEnumFiles->Next(1, &spPidl, &itemcount) !=
S_OK;
802 TRACE(
"QueryContextMenu %p %p %u %u %u %u\n",
this, hMenu, indexMenu, idCmdFirst, idCmdLast,
uFlags );
815 mii.
wID = idCmdFirst +
id++;
832 TRACE(
"%p %p verb %p\n",
this, lpcmi, lpcmi->
lpVerb);
838 ERR(
"GetEnvironmentVariableW failed\n");
849 if (lpSB &&
SUCCEEDED(lpSB->QueryActiveShellView(&lpSV)))
857 FIXME(
"%p %lu %u %p %p %u\n",
this, idCommand,
uFlags, lpReserved, lpszName, uMaxNameLen);
875 FIXME(
"%p %lu %p %lu\n",
this, uPageID, pfnReplaceWith,
lParam);
886 TRACE(
"%p %p %p %p\n",
this, pidlFolder, pdtobj, hkeyProgID );
899 DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength;
903 WCHAR szKey[150] =
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\";
905 if (wszPath[1] !=
L':')
913 StringCbCopyW(wszRootPathName,
sizeof(wszRootPathName), wszPath);
934 ERR(
"RegCreateKeyExW failed\n");
951 dwSize =
sizeof(dwNukeOnDelete);
964 else if (dwNukeOnDelete)
1038 LPENUMIDLIST penumFiles;
1059 hr = pRecycleBin->
EnumObjects(
hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penumFiles);
1069 while (penumFiles->Next(1, &pidl,
NULL) ==
S_OK)
1076 penumFiles->Release();
1126 L"AppEvents\\Schemes\\Apps\\Explorer\\EmptyRecycleBin\\.Current",
1177 if (!(pszRootPath) || (pszRootPath[0] == 0) ||
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
#define PID_STG_WRITETIME
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define HRESULT_FROM_WIN32(x)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
interface IBindCtx * LPBC
virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
virtual HRESULT WINAPI GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL AddToEnumList(LPITEMIDLIST pidl)
HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
#define LOCALE_USER_DEFAULT
#define HKEY_CURRENT_USER
GLuint GLuint GLsizei count
HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
virtual HRESULT WINAPI GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
WCHAR swShell32Name[MAX_PATH]
#define IDS_SHV_COLUMN_DELFROM
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
DWORD WINAPI GetLastError(VOID)
#define MAKEINTRESOURCEA(i)
PDELETED_FILE_DETAILS_W UnpackDetailsFromPidl(LPCITEMIDLIST pidl)
#define MAKE_COMPARE_HRESULT(x)
static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME *ft)
PIDLRecycleStruct * pFileDetails
virtual HRESULT WINAPI GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
HRESULT CRecyclerExtractIcon_CreateInstance(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut)
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
#define IID_PPV_ARG(Itype, ppType)
LPWSTR WINAPI StrDupW(LPCWSTR lpszStr)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI GetDeletedFileDetailsW(IN HANDLE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL, OUT LPDWORD RequiredSize OPTIONAL)
#define IDS_SHV_COLUMN_TYPE
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)
virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
HRESULT GetDisplayNameOf([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
#define MB_ICONEXCLAMATION
static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails)
BOOL WINAPI DeleteFileHandleToRecycleBin(IN HANDLE hDeletedFile)
#define IDS_SHV_COLUMN_SIZE
LONG WINAPI RegCloseKey(HKEY hKey)
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
BOOL WINAPI PathStripToRootW(LPWSTR lpszPath)
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
virtual HRESULT WINAPI GetCurFolder(PIDLIST_ABSOLUTE *pidl)
HRESULT EnumObjects([in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList)
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
#define IDS_SHV_COLUMN_DELDATE
virtual HRESULT WINAPI BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
#define PID_DISPLACED_FROM
_Reserved_ DWORD _In_ DWORD _Out_ DWORD _Out_writes_bytes_to_opt_ pcbTypeName LPSTR szTypeName
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
HRESULT BindToObject([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
#define REG_CREATED_NEW_KEY
struct _SFV_CREATE SFV_CREATE
#define MAKE_HRESULT(sev, fac, code)
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
#define ERROR_FILE_NOT_FOUND
static PROTOCOLDATA * pdata
#define IDS_DELETEITEM_TEXT
#define DeleteFileToRecycleBin
#define PID_STG_STORAGETYPE
virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
BOOL WINAPI CloseRecycleBinHandle(IN HANDLE hDeletedFile)
virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum)
virtual HRESULT WINAPI Initialize(PCIDLIST_ABSOLUTE pidl)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon(void)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
virtual HRESULT WINAPI ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut)
virtual HRESULT WINAPI BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile)
#define FAILED_UNEXPECTEDLY(hr)
BOOL WINAPI RestoreFile(IN HANDLE hDeletedFile)
LPARAM LPFNSVADDPROPSHEETPAGE
HRESULT WINAPI Initialize(DWORD dwFlags)
BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, LONG len, BOOL bPrependDot)
unsigned __int3264 UINT_PTR
virtual HRESULT WINAPI ReplacePage(EXPPS uPageID, LPFNSVADDPROPSHEETPAGE pfnReplaceWith, LPARAM lParam)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const columninfo RecycleBinColumns[]
LPWSTR WINAPI StrFormatKBSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
BOOL WINAPI EmptyRecycleBinW(IN LPCWSTR pszRoot OPTIONAL)
HRESULT CRecyclerDropTarget_CreateInstance(REFIID riid, LPVOID *ppvOut)
virtual HRESULT WINAPI GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
#define memcpy(s1, s2, n)
#define IDS_DELETEMULTIPLE_TEXT
virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
BOOL WINAPI EnumerateRecycleBinW(IN LPCWSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
#define IDS_EMPTY_BITBUCKET
#define IDS_SHV_COLUMN_MODIFIED
#define PID_DISPLACED_DATE
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)
#define shell32_hInstance
HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
BOOL TRASH_TrashFile(LPCWSTR wszPath)
#define COM_INTERFACE_ENTRY_IID(iid, x)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
#define SHERB_NOCONFIRMATION
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
BOOL WINAPI InsertMenuItemW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
#define CWM_GETISHELLBROWSER
virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen)
virtual HRESULT WINAPI GetClassID(CLSID *pClassID)
WINE_DEFAULT_DEBUG_CHANNEL(CRecycleBin)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define MultiByteToWideChar
struct SEARCH_CONTEXT * PSEARCH_CONTEXT
static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
void WINAPI SHFree(LPVOID pv)
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags)
struct tagContext Context
virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
static BOOL WINAPI CBEnumRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile)
virtual HRESULT WINAPI AddPages(LPFNSVADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
#define RtlCopyMemory(Destination, Source, Length)
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
BOOL TRASH_CanTrashFile(LPCWSTR wszPath)
#define MAKEINTRESOURCEW(i)
#define IDS_SHV_COLUMN_NAME
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
#define GetEnvironmentVariableW(x, y, z)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
virtual HRESULT WINAPI CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
#define SHERB_NOPROGRESSUI
LPVOID WINAPI SHAlloc(SIZE_T len)
#define HeapFree(x, y, z)
virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
#define IsEqualIID(riid1, riid2)
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
#define ERROR_INSUFFICIENT_BUFFER
BOOL WINAPI PlaySoundW(LPCWSTR pszSoundW, HMODULE hmod, DWORD fdwSound)