ReactOS 0.4.16-dev-570-g1868985
CRecycleBin.cpp File Reference
#include <precomp.h>
#include <mmsystem.h>
#include <ntquery.h>
#include "pshpack1.h"
#include "poppack.h"
Include dependency graph for CRecycleBin.cpp:

Go to the source code of this file.

Classes

struct  columninfo
 
struct  BBITEMDATA
 
struct  BBITEMFOOTER
 
class  CRecycleBinItemContextMenu
 
class  CRecycleBinEnum
 

Macros

#define COLUMN_NAME   0
 
#define COLUMN_DELFROM   1
 
#define COLUMN_DATEDEL   2
 
#define COLUMN_SIZE   3
 
#define COLUMN_TYPE   4
 
#define COLUMN_MTIME   5
 
#define COLUMNS_COUNT   6
 
#define BBITEMFILETYPE   (PT_FS | PT_FS_UNICODE_FLAG | PT_FS_FILE_FLAG)
 
#define BBITEMFOLDERTYPE   (PT_FS | PT_FS_UNICODE_FLAG | PT_FS_FOLDER_FLAG)
 

Enumerations

enum  { IDC_BB_RESTORE = 1 , IDC_BB_CUT , IDC_BB_DELETE , IDC_BB_PROPERTIES }
 
enum  { IDC_EMPTYRECYCLEBIN = 1 , IDC_PROPERTIES }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (CRecycleBin)
 
static BOOL IsFolder (LPCITEMIDLIST pidl)
 
static BBITEMDATAValidateItem (LPCITEMIDLIST pidl)
 
static LPITEMIDLIST CreateItem (LPCWSTR pszTrash, LPCWSTR pszOrig, const DELETED_FILE_INFO &Details)
 
static UINT GetItemFileSize (LPCITEMIDLIST pidl)
 
static LPCWSTR GetItemOriginalFullPath (const BBITEMDATA &Data)
 
static HRESULT GetItemOriginalFolder (const BBITEMDATA &Data, LPWSTR &Out)
 
static LPCWSTR GetItemOriginalFileName (const BBITEMDATA &Data)
 
static LPCWSTR GetItemRecycledFullPath (const BBITEMDATA &Data)
 
static LPCWSTR GetItemRecycledFileName (LPCITEMIDLIST pidl, const BBITEMDATA &Data)
 
static int GetItemDriveNumber (LPCITEMIDLIST pidl)
 
static HRESULT GetItemTypeName (PCUITEMID_CHILD pidl, const BBITEMDATA &Data, SHFILEINFOW &shfi)
 
static HDELFILE GetRecycleBinFileHandleFromItem (const BBITEMDATA &Data)
 
static UINT GetDefaultRecycleDriveNumber ()
 
static LPCWSTR GetGlobalRecycleBinPath ()
 
static BOOL IsRecycleBinEmpty (IShellFolder *pSF)
 
static void CRecycleBin_ChangeNotifyBBItem (_In_ LONG Event, _In_opt_ LPCITEMIDLIST BBItem)
 
EXTERN_C void CRecycleBin_NotifyRecycled (LPCWSTR OrigPath, const WIN32_FIND_DATAW *pFind, const RECYCLEBINFILEIDENTITY *pFI)
 
static void CRecycleBin_NotifyRemovedFromRecycleBin (LPCITEMIDLIST BBItem)
 
static HRESULT CRecyclerExtractIcon_CreateInstance (IShellFolder &FSFolder, LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut)
 
static BOOL ConfirmDelete (LPCMINVOKECOMMANDINFO lpcmi, UINT cidl, LPCITEMIDLIST pidl, const BBITEMDATA &Data)
 
static HRESULT CompareCanonical (const BBITEMDATA &Data1, const BBITEMDATA &Data2)
 
BOOL TRASH_CanTrashFile (LPCWSTR wszPath)
 
BOOL TRASH_TrashFile (LPCWSTR wszPath)
 
static void TRASH_PlayEmptyRecycleBinSound ()
 
EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon (void)
 
HRESULT WINAPI SHEmptyRecycleBinA (HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags)
 
HRESULT WINAPI SHEmptyRecycleBinW (HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags)
 
HRESULT WINAPI SHQueryRecycleBinA (LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
 
HRESULT WINAPI SHQueryRecycleBinW (LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
 

Variables

static const columninfo RecycleBinColumns []
 
static const CMVERBMAP g_BBItemVerbMap []
 
static const CMVERBMAP g_BBFolderVerbMap []
 

Macro Definition Documentation

◆ BBITEMFILETYPE

#define BBITEMFILETYPE   (PT_FS | PT_FS_UNICODE_FLAG | PT_FS_FILE_FLAG)

Definition at line 64 of file CRecycleBin.cpp.

◆ BBITEMFOLDERTYPE

#define BBITEMFOLDERTYPE   (PT_FS | PT_FS_UNICODE_FLAG | PT_FS_FOLDER_FLAG)

Definition at line 65 of file CRecycleBin.cpp.

◆ COLUMN_DATEDEL

#define COLUMN_DATEDEL   2

Definition at line 54 of file CRecycleBin.cpp.

◆ COLUMN_DELFROM

#define COLUMN_DELFROM   1

Definition at line 53 of file CRecycleBin.cpp.

◆ COLUMN_MTIME

#define COLUMN_MTIME   5

Definition at line 57 of file CRecycleBin.cpp.

◆ COLUMN_NAME

#define COLUMN_NAME   0

Definition at line 52 of file CRecycleBin.cpp.

◆ COLUMN_SIZE

#define COLUMN_SIZE   3

Definition at line 55 of file CRecycleBin.cpp.

◆ COLUMN_TYPE

#define COLUMN_TYPE   4

Definition at line 56 of file CRecycleBin.cpp.

◆ COLUMNS_COUNT

#define COLUMNS_COUNT   6

Definition at line 59 of file CRecycleBin.cpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
IDC_BB_RESTORE 
IDC_BB_CUT 
IDC_BB_DELETE 
IDC_BB_PROPERTIES 

Definition at line 430 of file CRecycleBin.cpp.

@ IDC_BB_DELETE
@ IDC_BB_RESTORE
@ IDC_BB_CUT
@ IDC_BB_PROPERTIES

◆ anonymous enum

anonymous enum
Enumerator
IDC_EMPTYRECYCLEBIN 
IDC_PROPERTIES 

Definition at line 984 of file CRecycleBin.cpp.

@ IDC_EMPTYRECYCLEBIN
@ IDC_PROPERTIES

Function Documentation

◆ CompareCanonical()

static HRESULT CompareCanonical ( const BBITEMDATA Data1,
const BBITEMDATA Data2 
)
static

Definition at line 660 of file CRecycleBin.cpp.

661{
662 // This assumes two files with the same original path cannot be deleted at
663 // the same time (within the FAT/NTFS FILETIME resolution).
664 int result = CompareFileTime(&Data1.DeletionTime, &Data2.DeletionTime);
665 if (result == 0)
668}
static LPCWSTR GetItemOriginalFullPath(const BBITEMDATA &Data)
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
GLuint64EXT * result
Definition: glext.h:11304
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:619
FILETIME DeletionTime
Definition: CRecycleBin.cpp:68

Referenced by CRecycleBin::CompareIDs().

◆ ConfirmDelete()

static BOOL ConfirmDelete ( LPCMINVOKECOMMANDINFO  lpcmi,
UINT  cidl,
LPCITEMIDLIST  pidl,
const BBITEMDATA Data 
)
static

Definition at line 476 of file CRecycleBin.cpp.

477{
478 if (lpcmi->fMask & CMIC_MASK_FLAG_NO_UI)
479 {
480 return TRUE;
481 }
482 else if (cidl == 1)
483 {
484 const UINT ask = IsFolder(pidl) ? ASK_DELETE_FOLDER : ASK_DELETE_FILE;
485 return SHELL_ConfirmYesNoW(lpcmi->hwnd, ask, GetItemOriginalFileName(Data));
486 }
488 wsprintfW(buf, L"%d", cidl);
490}
static BOOL IsFolder(LPCITEMIDLIST pidl)
Definition: CRecycleBin.cpp:84
static LPCWSTR GetItemOriginalFileName(const BBITEMDATA &Data)
#define TRUE
Definition: types.h:120
#define MAX_PATH
Definition: compat.h:34
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
#define ASK_DELETE_MULTIPLE_ITEM
Definition: shell32_main.h:129
#define ASK_DELETE_FILE
Definition: shell32_main.h:127
#define ASK_DELETE_FOLDER
Definition: shell32_main.h:128
BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir)
Definition: shlfileop.cpp:332
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CRecycleBinItemContextMenu::InvokeCommand().

◆ CreateItem()

static LPITEMIDLIST CreateItem ( LPCWSTR  pszTrash,
LPCWSTR  pszOrig,
const DELETED_FILE_INFO Details 
)
static

Definition at line 105 of file CRecycleBin.cpp.

106{
108 LPCWSTR pszName = PathFindFileNameW(pszTrash);
109 SIZE_T ofsName = (SIZE_T)(pszName - pszTrash);
110 SIZE_T cchName = wcslen(pszName) + 1, cbName = cchName * sizeof(WCHAR);
111 SIZE_T cbFSNames = cbName + sizeof("") + 1; // Empty short name + 1 for WORD alignment
112 SIZE_T cbFS = sizeof(WORD) + FIELD_OFFSET(PIDLDATA, u.file.szNames) + cbFSNames;
113 SIZE_T cchTrash = ofsName + cchName, cbTrash = cchTrash * sizeof(WCHAR);
114 SIZE_T cchOrig = wcslen(pszOrig) + 1, cbOrig = cchOrig * sizeof(WCHAR);
115 SIZE_T cbData = FIELD_OFFSET(BBITEMDATA, OriginalLocation) + cbOrig + cbTrash;
116 SIZE_T cb = cbFS + cbData + sizeof(BBITEMFOOTER);
117 if (cb > 0xffff)
118 return NULL;
119 LPITEMIDLIST pidl = (LPITEMIDLIST)SHAlloc(cb + sizeof(WORD));
120 if (!pidl)
121 return pidl;
122
123 pidl->mkid.cb = cb;
124 pidl->mkid.abID[0] = folder ? BBITEMFOLDERTYPE : BBITEMFILETYPE;
125 ILGetNext(pidl)->mkid.cb = 0; // Terminator
126 FileStruct &fsitem = ((PIDLDATA*)pidl->mkid.abID)->u.file;
127 fsitem.dummy = 0;
128 C_ASSERT(sizeof(RECYCLEBINFILESIZETYPE) <= sizeof(fsitem.dwFileSize));
129 fsitem.dwFileSize = Details.FileSize;
130 fsitem.uFileAttribs = LOWORD(Details.Attributes);
131 FileTimeToDosDateTime(&Details.LastModification, &fsitem.uFileDate, &fsitem.uFileTime);
132 CopyMemory(fsitem.szNames, pszName, cbName);
133 LPSTR pszShort = const_cast<LPSTR>(&fsitem.szNames[cbName]);
134 pszShort[0] = '\0';
135 pszShort[1] = '\0'; // Fill alignment padding (for ILIsEqual memcmp)
136
137 BBITEMFOOTER *footer = (BBITEMFOOTER*)((BYTE*)pidl + cb - sizeof(BBITEMFOOTER));
138 footer->DataSize = cbData;
140
141 BBITEMDATA *data = (BBITEMDATA*)((BYTE*)footer - footer->DataSize);
142 data->DeletionTime = Details.DeletionTime;
143#ifdef COLUMN_FATTS
144 data->AttribsHi = HIWORD(Details.Attributes);
145#endif
146 data->RecycledPathOffset = FIELD_OFFSET(BBITEMDATA, OriginalLocation) + cbOrig;
147 CopyMemory(data->OriginalLocation, pszOrig, cbOrig);
148 CopyMemory((BYTE*)data + data->RecycledPathOffset, pszTrash, cbTrash);
149
150 assert(!(((SIZE_T)&fsitem.szNames) & 1)); // WORD aligned please
151 C_ASSERT(!(FIELD_OFFSET(BBITEMDATA, OriginalLocation) & 1)); // WORD aligned please
152 assert(!(((SIZE_T)data) & 1)); // WORD aligned please
153 assert(_ILGetFSType(pidl));
154 assert(_ILIsPidlSimple(pidl));
155 assert(*(WORD*)((BYTE*)pidl + pidl->mkid.cb - sizeof(WORD)) & 1); // ENDSIG bit
156 assert(_ILGetFileStructW(pidl) == NULL); // Our custom footer is incompatible with WinXP pidl data
157 assert(ValidateItem(pidl) == data);
158 return pidl;
159}
#define BBITEMFOLDERTYPE
Definition: CRecycleBin.cpp:65
#define BBITEMFILETYPE
Definition: CRecycleBin.cpp:64
static BBITEMDATA * ValidateItem(LPCITEMIDLIST pidl)
Definition: CRecycleBin.cpp:89
#define NULL
Definition: types.h:112
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
BOOL WINAPI FileTimeToDosDateTime(IN CONST FILETIME *lpFileTime, OUT LPWORD lpFatDate, OUT LPWORD lpFatTime)
Definition: time.c:37
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
#define assert(x)
Definition: debug.h:53
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned short WORD
Definition: ntddk_ex.h:93
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
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 * u
Definition: glfuncs.h:240
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define C_ASSERT(e)
Definition: intsafe.h:73
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define LOWORD(l)
Definition: pedump.c:82
FileStructW * _ILGetFileStructW(LPCITEMIDLIST pidl)
Definition: pidl.c:2428
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
static BYTE _ILGetFSType(LPCITEMIDLIST pidl)
Definition: pidl.h:125
UINT RECYCLEBINFILESIZETYPE
Definition: recyclebin.h:24
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
RECYCLEBINFILESIZETYPE FileSize
Definition: recyclebin.h:42
FILETIME DeletionTime
Definition: recyclebin.h:41
FILETIME LastModification
Definition: recyclebin.h:40
Definition: fci.c:116
WORD uFileDate
Definition: pidl.h:178
WORD uFileAttribs
Definition: pidl.h:180
WORD uFileTime
Definition: pidl.h:179
DWORD dwFileSize
Definition: pidl.h:177
BYTE dummy
Definition: pidl.h:176
CHAR szNames[1]
Definition: pidl.h:181
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define HIWORD(l)
Definition: typedefs.h:247
#define CopyMemory
Definition: winbase.h:1735
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2792
char * LPSTR
Definition: xmlstorage.h:182
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193

Referenced by CRecycleBinEnum::CBEnumRecycleBin(), and CRecycleBin_NotifyRecycled().

◆ CRecycleBin_ChangeNotifyBBItem()

static void CRecycleBin_ChangeNotifyBBItem ( _In_ LONG  Event,
_In_opt_ LPCITEMIDLIST  BBItem 
)
static

Definition at line 246 of file CRecycleBin.cpp.

247{
249 if (!pidlFolder)
250 return;
251 if (BBItem)
252 {
253 assert(ValidateItem(BBItem));
254 if (LPITEMIDLIST pidlFull = ILCombine(pidlFolder, BBItem))
255 {
256 // Send notification for [Desktop][RecycleBin][BBItem]
257 // FIXME: Windows monitors each RecycleBin FS folder on every drive
258 // instead of manually sending these?
260 ILFree(pidlFull);
261 }
262 }
263 else
264 {
265 SHChangeNotify(Event, SHCNF_IDLIST, pidlFolder, NULL);
266 }
267 ILFree(pidlFolder);
268}
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
#define FALSE
Definition: types.h:117
LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, int nFolder, BOOL fCreate)
Definition: pidl.c:445
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:816
#define CSIDL_BITBUCKET
Definition: shlobj.h:2183
#define SHCNF_IDLIST
Definition: shlobj.h:1921

Referenced by CRecycleBin_NotifyRecycled(), CRecycleBin_NotifyRemovedFromRecycleBin(), and SHEmptyRecycleBinW().

◆ CRecycleBin_NotifyRecycled()

EXTERN_C void CRecycleBin_NotifyRecycled ( LPCWSTR  OrigPath,
const WIN32_FIND_DATAW pFind,
const RECYCLEBINFILEIDENTITY pFI 
)

Definition at line 270 of file CRecycleBin.cpp.

272{
274 info.LastModification = pFind->ftLastWriteTime;
275 info.DeletionTime = pFI->DeletionTime;
276 info.FileSize = pFind->nFileSizeLow;
277 info.Attributes = pFind->dwFileAttributes;
278 if (LPITEMIDLIST pidl = CreateItem(pFI->RecycledFullPath, OrigPath, info))
279 {
281 ILFree(pidl);
282 }
283}
static void CRecycleBin_ChangeNotifyBBItem(_In_ LONG Event, _In_opt_ LPCITEMIDLIST BBItem)
static LPITEMIDLIST CreateItem(LPCWSTR pszTrash, LPCWSTR pszOrig, const DELETED_FILE_INFO &Details)
#define SHCNE_MKDIR
Definition: shlobj.h:1893
#define SHCNE_CREATE
Definition: shlobj.h:1891

Referenced by RecycleBin5::DeleteFile().

◆ CRecycleBin_NotifyRemovedFromRecycleBin()

static void CRecycleBin_NotifyRemovedFromRecycleBin ( LPCITEMIDLIST  BBItem)
static

Definition at line 285 of file CRecycleBin.cpp.

286{
288
289 CComHeapPtr<ITEMIDLIST> pidlBB(SHCloneSpecialIDList(NULL, CSIDL_BITBUCKET, FALSE));
290 CComPtr<IShellFolder> pSF;
291 if (pidlBB && SUCCEEDED(SHBindToObject(NULL, pidlBB, IID_PPV_ARG(IShellFolder, &pSF))))
292 {
293 if (IsRecycleBinEmpty(pSF))
295 }
296}
static BOOL IsRecycleBinEmpty(IShellFolder *pSF)
EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon(void)
EXTERN_C HRESULT SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:369
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define SHCNE_RMDIR
Definition: shlobj.h:1894
#define SHCNE_DELETE
Definition: shlobj.h:1892
#define IID_PPV_ARG(Itype, ppType)

Referenced by CRecycleBinItemContextMenu::InvokeCommand().

◆ CRecyclerExtractIcon_CreateInstance()

static HRESULT CRecyclerExtractIcon_CreateInstance ( IShellFolder FSFolder,
LPCITEMIDLIST  pidl,
REFIID  riid,
LPVOID ppvOut 
)
static

Definition at line 298 of file CRecycleBin.cpp.

300{
301 HRESULT hr = FSFolder.GetUIObjectOf(NULL, 1, &pidl, riid, NULL, ppvOut);
302 if (SUCCEEDED(hr))
303 return hr;
304
305 // In case the search fails we use a default icon
306 ERR("Recycler could not retrieve the icon, this shouldn't happen\n");
307
308 if (IsFolder(pidl))
310 else
312}
#define ERR(fmt,...)
Definition: precomp.h:57
static HRESULT SHELL_CreateFallbackExtractIconForNoAssocFile(REFIID riid, LPVOID *ppvOut)
Definition: utils.h:79
static HRESULT SHELL_CreateFallbackExtractIconForFolder(REFIID riid, LPVOID *ppvOut)
Definition: utils.h:72
REFIID riid
Definition: atlbase.h:39
HRESULT GetUIObjectOf([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)
HRESULT hr
Definition: shlfolder.c:183

Referenced by CRecycleBin::GetUIObjectOf().

◆ GetDefaultRecycleDriveNumber()

static UINT GetDefaultRecycleDriveNumber ( )
static

Definition at line 223 of file CRecycleBin.cpp.

224{
225 int drive = 0;
229 return max(0, drive);
230}
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2352
int WINAPI PathGetDriveNumberW(const WCHAR *path)
Definition: path.c:553
#define _countof(array)
Definition: sndvol32.h:70
#define max(a, b)
Definition: svc.c:63

Referenced by CRecycleBin::GetFSFolderForItem().

◆ GetGlobalRecycleBinPath()

static LPCWSTR GetGlobalRecycleBinPath ( )
inlinestatic

Definition at line 232 of file CRecycleBin.cpp.

233{
234 return NULL;
235}

Referenced by CRecycleBinEnum::Initialize().

◆ GetItemDriveNumber()

static int GetItemDriveNumber ( LPCITEMIDLIST  pidl)
static

Definition at line 195 of file CRecycleBin.cpp.

196{
197 if (BBITEMDATA *pData = ValidateItem(pidl))
201}
static LPCWSTR GetItemRecycledFullPath(const BBITEMDATA &Data)
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2174
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830

Referenced by CRecycleBin::GetFSFolderForItem().

◆ GetItemFileSize()

static UINT GetItemFileSize ( LPCITEMIDLIST  pidl)
inlinestatic

Definition at line 161 of file CRecycleBin.cpp.

162{
163 return _ILGetFSType(pidl) ? ((PIDLDATA*)pidl->mkid.abID)->u.file.dwFileSize : 0;
164}

Referenced by CRecycleBin::CompareIDs(), and CRecycleBin::GetDetailsOf().

◆ GetItemOriginalFileName()

static LPCWSTR GetItemOriginalFileName ( const BBITEMDATA Data)
static

◆ GetItemOriginalFolder()

static HRESULT GetItemOriginalFolder ( const BBITEMDATA Data,
LPWSTR Out 
)
static

Definition at line 171 of file CRecycleBin.cpp.

172{
174 if (SUCCEEDED(hr))
176 return hr;
177}
@ Out
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:629
HRESULT WINAPI SHStrDupW(LPCWSTR src, LPWSTR *dest)
Definition: string.c:2018

Referenced by CRecycleBin::CompareIDs(), and CRecycleBin::GetDetailsOf().

◆ GetItemOriginalFullPath()

static LPCWSTR GetItemOriginalFullPath ( const BBITEMDATA Data)
inlinestatic

Definition at line 166 of file CRecycleBin.cpp.

167{
168 return Data.OriginalLocation;
169}

Referenced by CompareCanonical(), CRecycleBin::GetDisplayNameOf(), GetItemOriginalFileName(), and GetItemOriginalFolder().

◆ GetItemRecycledFileName()

static LPCWSTR GetItemRecycledFileName ( LPCITEMIDLIST  pidl,
const BBITEMDATA Data 
)
inlinestatic

Definition at line 189 of file CRecycleBin.cpp.

190{
191 C_ASSERT(BBITEMFILETYPE & PT_FS_UNICODE_FLAG);
192 return (LPCWSTR)((LPPIDLDATA)pidl->mkid.abID)->u.file.szNames;
193}
struct tagPIDLDATA * LPPIDLDATA

◆ GetItemRecycledFullPath()

static LPCWSTR GetItemRecycledFullPath ( const BBITEMDATA Data)
inlinestatic

Definition at line 184 of file CRecycleBin.cpp.

185{
186 return (LPCWSTR)((BYTE*)&Data + Data.RecycledPathOffset);
187}

Referenced by CRecycleBin::GetDisplayNameOf(), GetItemDriveNumber(), GetItemTypeName(), and GetRecycleBinFileHandleFromItem().

◆ GetItemTypeName()

static HRESULT GetItemTypeName ( PCUITEMID_CHILD  pidl,
const BBITEMDATA Data,
SHFILEINFOW shfi 
)
static

Definition at line 203 of file CRecycleBin.cpp.

204{
206 UINT attribs = ((PIDLDATA*)pidl->mkid.abID)->u.file.uFileAttribs;
208 return S_OK;
209 shfi.szTypeName[0] = UNICODE_NULL;
210 return E_FAIL;
211}
#define E_FAIL
Definition: ddrawi.h:102
const GLint * attribs
Definition: glext.h:10538
#define S_OK
Definition: intsafe.h:52
#define UNICODE_NULL
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:430
#define SHGFI_TYPENAME
Definition: shellapi.h:168
#define SHGFI_USEFILEATTRIBUTES
Definition: shellapi.h:182
WCHAR szTypeName[80]
Definition: shellapi.h:377

Referenced by CRecycleBin::CompareIDs(), and CRecycleBin::GetDetailsOf().

◆ GetRecycleBinFileHandleFromItem()

static HDELFILE GetRecycleBinFileHandleFromItem ( const BBITEMDATA Data)
static

Definition at line 213 of file CRecycleBin.cpp.

214{
217}
EXTERN_C HDELFILE GetRecycleBinFileHandle(IN LPCWSTR pszRoot OPTIONAL, IN const RECYCLEBINFILEIDENTITY *pFI)
Definition: recyclebin.c:277

Referenced by CRecycleBinItemContextMenu::InvokeCommand().

◆ IsFolder()

◆ IsRecycleBinEmpty()

static BOOL IsRecycleBinEmpty ( IShellFolder pSF)
static

Definition at line 237 of file CRecycleBin.cpp.

238{
239 CComPtr<IEnumIDList> spEnumFiles;
240 HRESULT hr = pSF->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &spEnumFiles);
241 CComHeapPtr<ITEMIDLIST> spPidl;
242 ULONG itemcount;
243 return FAILED(hr) || spEnumFiles->Next(1, &spPidl, &itemcount) != S_OK;
244}
HRESULT EnumObjects([in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList)
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t ULONG
Definition: typedefs.h:59

Referenced by CRecycleBin_NotifyRemovedFromRecycleBin(), and CRecycleBin::QueryContextMenu().

◆ SHEmptyRecycleBinA()

HRESULT WINAPI SHEmptyRecycleBinA ( HWND  hwnd,
LPCSTR  pszRootPath,
DWORD  dwFlags 
)

Definition at line 1234 of file CRecycleBin.cpp.

1235{
1236 LPWSTR szRootPathW = NULL;
1237 int len;
1238 HRESULT hr;
1239
1240 TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_a(pszRootPath), dwFlags);
1241
1242 if (pszRootPath)
1243 {
1244 len = MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, NULL, 0);
1245 if (len == 0)
1247 szRootPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1248 if (!szRootPathW)
1249 return E_OUTOFMEMORY;
1250 if (MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, szRootPathW, len) == 0)
1251 {
1252 HeapFree(GetProcessHeap(), 0, szRootPathW);
1254 }
1255 }
1256
1257 hr = SHEmptyRecycleBinW(hwnd, szRootPathW, dwFlags);
1258 HeapFree(GetProcessHeap(), 0, szRootPathW);
1259
1260 return hr;
1261}
HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags)
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define MultiByteToWideChar
Definition: compat.h:110
GLenum GLsizei len
Definition: glext.h:6722
#define debugstr_a
Definition: kernel32.h:31
#define TRACE(s)
Definition: solgame.cpp:4
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ SHEmptyRecycleBinW()

HRESULT WINAPI SHEmptyRecycleBinW ( HWND  hwnd,
LPCWSTR  pszRootPath,
DWORD  dwFlags 
)

Definition at line 1263 of file CRecycleBin.cpp.

1264{
1265 WCHAR szBuffer[MAX_PATH];
1266 DWORD count;
1267 LONG ret;
1268 IShellFolder *pDesktop, *pRecycleBin;
1269 PIDLIST_ABSOLUTE pidlRecycleBin;
1270 PITEMID_CHILD pidl;
1271 HRESULT hr = S_OK;
1272 LPENUMIDLIST penumFiles;
1273 STRRET StrRet;
1274
1275 TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_w(pszRootPath), dwFlags);
1276
1278 {
1279 hr = SHGetDesktopFolder(&pDesktop);
1280 if (FAILED(hr))
1281 return hr;
1282 hr = SHGetFolderLocation(NULL, CSIDL_BITBUCKET, NULL, 0, &pidlRecycleBin);
1283 if (FAILED(hr))
1284 {
1285 pDesktop->Release();
1286 return hr;
1287 }
1288 hr = pDesktop->BindToObject(pidlRecycleBin, NULL, IID_PPV_ARG(IShellFolder, &pRecycleBin));
1289 CoTaskMemFree(pidlRecycleBin);
1290 pDesktop->Release();
1291 if (FAILED(hr))
1292 return hr;
1293 hr = pRecycleBin->EnumObjects(hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penumFiles);
1294 if (FAILED(hr))
1295 {
1296 pRecycleBin->Release();
1297 return hr;
1298 }
1299
1300 count = 0;
1301 if (hr != S_FALSE)
1302 {
1303 while (penumFiles->Next(1, &pidl, NULL) == S_OK)
1304 {
1305 count++;
1306 pRecycleBin->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &StrRet);
1307 StrRetToBuf(&StrRet, pidl, szBuffer, _countof(szBuffer));
1308 CoTaskMemFree(pidl);
1309 }
1310 penumFiles->Release();
1311 }
1312 pRecycleBin->Release();
1313
1314 switch (count)
1315 {
1316 case 0:
1317 /* no files, don't need confirmation */
1318 break;
1319
1320 case 1:
1321 /* we have only one item inside the bin, so show a message box with its name */
1324 {
1325 return S_OK;
1326 }
1327 break;
1328
1329 default:
1330 /* we have more than one item, so show a message box with the count of the items */
1331 StringCbPrintfW(szBuffer, sizeof(szBuffer), L"%u", count);
1334 {
1335 return S_OK;
1336 }
1337 break;
1338 }
1339 }
1340
1342 {
1343 ret = EmptyRecycleBinW(pszRootPath);
1344 }
1345 else
1346 {
1347 /* FIXME
1348 * show a progress dialog
1349 */
1350 ret = EmptyRecycleBinW(pszRootPath);
1351 }
1352
1353 if (!ret)
1355
1357 if (!(dwFlags & SHERB_NOSOUND))
1358 {
1360 }
1361 return S_OK;
1362}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
static void TRASH_PlayEmptyRecycleBinSound()
#define shell32_hInstance
#define ShellMessageBoxW
Definition: precomp.h:62
BOOL WINAPI EmptyRecycleBinW(IN LPCWSTR pszRoot OPTIONAL)
Definition: recyclebin.c:145
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3150
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei count
Definition: gl.h:1545
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
HRESULT BindToObject([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
HRESULT GetDisplayNameOf([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
ULONG Release()
#define debugstr_w
Definition: kernel32.h:32
long LONG
Definition: pedump.c:60
#define SHERB_NOSOUND
Definition: shellapi.h:399
#define SHERB_NOPROGRESSUI
Definition: shellapi.h:398
#define SHERB_NOCONFIRMATION
Definition: shellapi.h:397
#define StrRet
Definition: shellclasses.h:871
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1902
#define StrRetToBuf
Definition: shlwapi.h:1795
#define IDS_DELETEITEM_TEXT
Definition: shresdef.h:124
#define IDS_EMPTY_BITBUCKET
Definition: shresdef.h:186
#define IDS_DELETEMULTIPLE_TEXT
Definition: shresdef.h:125
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:557
int ret
#define S_FALSE
Definition: winerror.h:2357
#define MB_YESNO
Definition: winuser.h:820
#define IDNO
Definition: winuser.h:839
#define MB_ICONEXCLAMATION
Definition: winuser.h:788
#define MB_DEFBUTTON2
Definition: winuser.h:802
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by CRecycleBin::InvokeCommand(), and SHEmptyRecycleBinA().

◆ SHQueryRecycleBinA()

HRESULT WINAPI SHQueryRecycleBinA ( LPCSTR  pszRootPath,
LPSHQUERYRBINFO  pSHQueryRBInfo 
)

Definition at line 1364 of file CRecycleBin.cpp.

1365{
1366 LPWSTR szRootPathW = NULL;
1367 int len;
1368 HRESULT hr;
1369
1370 TRACE("%s, %p\n", debugstr_a(pszRootPath), pSHQueryRBInfo);
1371
1372 if (pszRootPath)
1373 {
1374 len = MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, NULL, 0);
1375 if (len == 0)
1377 szRootPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1378 if (!szRootPathW)
1379 return E_OUTOFMEMORY;
1380 if (MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, szRootPathW, len) == 0)
1381 {
1382 HeapFree(GetProcessHeap(), 0, szRootPathW);
1384 }
1385 }
1386
1387 hr = SHQueryRecycleBinW(szRootPathW, pSHQueryRBInfo);
1388 HeapFree(GetProcessHeap(), 0, szRootPathW);
1389
1390 return hr;
1391}
HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)

◆ SHQueryRecycleBinW()

HRESULT WINAPI SHQueryRecycleBinW ( LPCWSTR  pszRootPath,
LPSHQUERYRBINFO  pSHQueryRBInfo 
)

Definition at line 1393 of file CRecycleBin.cpp.

1394{
1395 TRACE("%s, %p\n", debugstr_w(pszRootPath), pSHQueryRBInfo);
1396
1397 if (!pszRootPath || (pszRootPath[0] == 0) ||
1398 !pSHQueryRBInfo || (pSHQueryRBInfo->cbSize < sizeof(SHQUERYRBINFO)))
1399 {
1400 return E_INVALIDARG;
1401 }
1402
1403 pSHQueryRBInfo->i64Size = 0;
1404 pSHQueryRBInfo->i64NumItems = 0;
1405
1406 CComPtr<IRecycleBin> spRecycleBin;
1407 HRESULT hr;
1408 if (FAILED_UNEXPECTEDLY((hr = GetDefaultRecycleBin(pszRootPath, &spRecycleBin))))
1409 return hr;
1410
1411 CComPtr<IRecycleBinEnumList> spEnumList;
1412 hr = spRecycleBin->EnumObjects(&spEnumList);
1413 if (!SUCCEEDED(hr))
1414 return hr;
1415
1416 while (TRUE)
1417 {
1418 CComPtr<IRecycleBinFile> spFile;
1419 hr = spEnumList->Next(1, &spFile, NULL);
1420 if (hr == S_FALSE)
1421 return S_OK;
1422
1424 return hr;
1425
1426 ULARGE_INTEGER Size = {};
1427 if (FAILED_UNEXPECTEDLY((hr = spFile->GetFileSize(&Size))))
1428 return hr;
1429
1430 pSHQueryRBInfo->i64Size += Size.QuadPart;
1431 pSHQueryRBInfo->i64NumItems++;
1432 }
1433
1434 return S_OK;
1435}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
EXTERN_C HRESULT GetDefaultRecycleBin(IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb)
Definition: recyclebin.c:306
__int64 i64Size
Definition: shellapi.h:381
__int64 i64NumItems
Definition: shellapi.h:382
DWORD cbSize
Definition: shellapi.h:380
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533

Referenced by SHQueryRecycleBinA().

◆ SHUpdateRecycleBinIcon()

EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon ( void  )

Definition at line 1219 of file CRecycleBin.cpp.

1220{
1221 FIXME("stub\n");
1222
1223 // HACK! This dwItem2 should be the icon index in the system image list that has changed.
1224 // FIXME: Call SHMapPIDLToSystemImageListIndex
1225 DWORD dwItem2 = -1;
1226
1228 return S_OK;
1229}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define SHCNE_UPDATEIMAGE
Definition: shlobj.h:1905
#define SHCNF_DWORD
Definition: shlobj.h:1924

Referenced by CRecycleBin_NotifyRemovedFromRecycleBin(), RecycleBin5::Restore(), and SHFileOperationW().

◆ TRASH_CanTrashFile()

BOOL TRASH_CanTrashFile ( LPCWSTR  wszPath)

Tests whether a file can be trashed

Parameters
wszPathPath to the file to be trash
Returns
TRUE if the file can be trashed, FALSE otherwise

Definition at line 1085 of file CRecycleBin.cpp.

1086{
1087 LONG ret;
1088 DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength;
1089 DWORD FileSystemFlags, dwSize, dwDisposition;
1090 HKEY hKey;
1091 WCHAR szBuffer[10];
1092 WCHAR szKey[150] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\";
1093
1094 if (wszPath[1] != L':')
1095 {
1096 /* path is UNC */
1097 return FALSE;
1098 }
1099
1100 // Copy and retrieve the root path from get given string
1101 WCHAR wszRootPathName[MAX_PATH];
1102 StringCbCopyW(wszRootPathName, sizeof(wszRootPathName), wszPath);
1103 PathStripToRootW(wszRootPathName);
1104
1105 // Test to see if the drive is fixed (non removable)
1106 if (GetDriveTypeW(wszRootPathName) != DRIVE_FIXED)
1107 {
1108 /* no bitbucket on removable media */
1109 return FALSE;
1110 }
1111
1112 if (!GetVolumeInformationW(wszRootPathName, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0))
1113 {
1114 ERR("GetVolumeInformationW failed with %u wszRootPathName=%s\n", GetLastError(), debugstr_w(wszRootPathName));
1115 return FALSE;
1116 }
1117
1118 swprintf(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber));
1119 wcscat(szKey, szBuffer);
1120
1121 if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_READ | KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS)
1122 {
1123 ERR("RegCreateKeyExW failed\n");
1124 return FALSE;
1125 }
1126
1127 if (dwDisposition & REG_CREATED_NEW_KEY)
1128 {
1129 /* per default move to bitbucket */
1130 dwNukeOnDelete = 0;
1131 RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD));
1132 /* per default unlimited size */
1133 dwSize = -1;
1134 RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD));
1135 }
1136 else
1137 {
1138 dwSize = sizeof(dwNukeOnDelete);
1139 ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize);
1140 if (ret != ERROR_SUCCESS)
1141 {
1142 dwNukeOnDelete = 0;
1144 {
1145 /* restore key and enable bitbucket */
1146 RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD));
1147 }
1148 }
1149 }
1150 BOOL bCanTrash = !dwNukeOnDelete;
1151 // FIXME: Check if bitbucket is full (CORE-13743)
1153 return bCanTrash;
1154}
#define RegCloseKey(hKey)
Definition: registry.h:49
wcscat
#define ERROR_SUCCESS
Definition: deptool.c:10
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)
Definition: reg.c:1096
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497
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)
Definition: volume.c:226
BOOL WINAPI PathStripToRootW(LPWSTR lpszPath)
Definition: path.c:733
#define swprintf
Definition: precomp.h:40
FxAutoRegKey hKey
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define KEY_READ
Definition: nt_native.h:1023
#define REG_CREATED_NEW_KEY
Definition: nt_native.h:1084
#define KEY_WRITE
Definition: nt_native.h:1031
#define REG_DWORD
Definition: sdbapi.c:596
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
unsigned char * LPBYTE
Definition: typedefs.h:53
#define DRIVE_FIXED
Definition: winbase.h:278
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by delete_files().

◆ TRASH_PlayEmptyRecycleBinSound()

static void TRASH_PlayEmptyRecycleBinSound ( )
static

Definition at line 1163 of file CRecycleBin.cpp.

1164{
1165 CRegKey regKey;
1166 CHeapPtr<WCHAR> pszValue;
1167 CHeapPtr<WCHAR> pszSndPath;
1168 DWORD dwType, dwSize;
1169 LONG lError;
1170
1171 lError = regKey.Open(HKEY_CURRENT_USER,
1172 L"AppEvents\\Schemes\\Apps\\Explorer\\EmptyRecycleBin\\.Current",
1173 KEY_READ);
1174 if (lError != ERROR_SUCCESS)
1175 return;
1176
1177 lError = regKey.QueryValue(NULL, &dwType, NULL, &dwSize);
1178 if (lError != ERROR_SUCCESS)
1179 return;
1180
1181 if (!pszValue.AllocateBytes(dwSize))
1182 return;
1183
1184 lError = regKey.QueryValue(NULL, &dwType, pszValue, &dwSize);
1185 if (lError != ERROR_SUCCESS)
1186 return;
1187
1188 if (dwType == REG_EXPAND_SZ)
1189 {
1190 dwSize = ExpandEnvironmentStringsW(pszValue, NULL, 0);
1191 if (dwSize == 0)
1192 return;
1193
1194 if (!pszSndPath.Allocate(dwSize))
1195 return;
1196
1197 if (ExpandEnvironmentStringsW(pszValue, pszSndPath, dwSize) == 0)
1198 return;
1199 }
1200 else if (dwType == REG_SZ)
1201 {
1202 /* The type is REG_SZ, no need to expand */
1203 pszSndPath.Attach(pszValue.Detach());
1204 }
1205 else
1206 {
1207 /* Invalid type */
1208 return;
1209 }
1210
1212}
bool AllocateBytes(_In_ size_t nBytes)
Definition: atlalloc.h:127
T * Detach()
Definition: atlalloc.h:168
bool Allocate(_In_ size_t nElements=1)
Definition: atlalloc.h:143
void Attach(T *lp)
Definition: atlalloc.h:162
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
#define REG_SZ
Definition: layer.c:22
#define SND_FILENAME
Definition: mmsystem.h:162
#define SND_ASYNC
Definition: mmsystem.h:154
#define SND_NODEFAULT
Definition: mmsystem.h:155
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
BOOL WINAPI PlaySoundW(LPCWSTR pszSoundW, HMODULE hmod, DWORD fdwSound)
Definition: playsound.c:709

Referenced by SHEmptyRecycleBinW().

◆ TRASH_TrashFile()

BOOL TRASH_TrashFile ( LPCWSTR  wszPath)

Definition at line 1157 of file CRecycleBin.cpp.

1158{
1159 TRACE("(%s)\n", debugstr_w(wszPath));
1160 return DeleteFileToRecycleBin(wszPath);
1161}
#define DeleteFileToRecycleBin
Definition: recyclebin.h:101

Referenced by delete_files().

◆ ValidateItem()

static BBITEMDATA * ValidateItem ( LPCITEMIDLIST  pidl)
static

Definition at line 89 of file CRecycleBin.cpp.

90{
91 const UINT minstringsize = sizeof(L"X") + sizeof(""); // PT_FS strings
92 const UINT minfs = sizeof(WORD) + FIELD_OFFSET(PIDLDATA, u.file.szNames) + minstringsize;
93 const UINT mindatasize = FIELD_OFFSET(BBITEMDATA, OriginalLocation) + (sizeof(L"C:\\X") * 2);
94 const UINT minsize = minfs + mindatasize + sizeof(BBITEMFOOTER);
95 const BYTE type = _ILGetType(pidl);
96 if ((type == BBITEMFILETYPE || type == BBITEMFOLDERTYPE) && pidl->mkid.cb >= minsize)
97 {
98 BBITEMFOOTER *pEnd = (BBITEMFOOTER*)((BYTE*)pidl + pidl->mkid.cb - sizeof(BBITEMFOOTER));
99 if (pEnd->EndSignature == BBITEMFOOTER::ENDSIG && pEnd->DataSize >= mindatasize)
100 return (BBITEMDATA*)((BYTE*)pEnd - pEnd->DataSize);
101 }
102 return NULL;
103}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static BYTE _ILGetType(LPCITEMIDLIST pidl)
Definition: pidl.h:120

Referenced by CreateItem(), CRecycleBin_ChangeNotifyBBItem(), GetItemDriveNumber(), and CRecycleBinItemContextMenu::InvokeCommand().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( CRecycleBin  )

Variable Documentation

◆ g_BBFolderVerbMap

const CMVERBMAP g_BBFolderVerbMap[]
static
Initial value:
=
{
{ "empty", IDC_EMPTYRECYCLEBIN },
{ "properties", IDC_PROPERTIES },
{ NULL }
}

Definition at line 985 of file CRecycleBin.cpp.

Referenced by CRecycleBin::GetCommandString(), and CRecycleBin::InvokeCommand().

◆ g_BBItemVerbMap

const CMVERBMAP g_BBItemVerbMap[]
static
Initial value:
=
{
{ "undelete", IDC_BB_RESTORE },
{ "cut", IDC_BB_CUT },
{ "delete", IDC_BB_DELETE },
{ "properties", IDC_BB_PROPERTIES },
{ NULL }
}

Definition at line 431 of file CRecycleBin.cpp.

Referenced by CRecycleBinItemContextMenu::GetCommandString(), and CRecycleBinItemContextMenu::InvokeCommand().

◆ RecycleBinColumns

const columninfo RecycleBinColumns[]
static
Initial value:
=
{
}
#define IDS_SHV_COLUMN_TYPE
Definition: resource.h:75
#define IDS_SHV_COLUMN_NAME
Definition: resource.h:74
#define PID_STG_STORAGETYPE
Definition: ntquery.h:50
#define PID_STG_WRITETIME
Definition: ntquery.h:60
#define PID_STG_SIZE
Definition: ntquery.h:58
#define PID_STG_NAME
Definition: ntquery.h:56
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define LVCFMT_RIGHT
Definition: commctrl.h:2604
#define PID_DISPLACED_FROM
Definition: shlguid.h:182
#define PID_DISPLACED_DATE
Definition: shlguid.h:183
#define IDS_SHV_COLUMN_DELFROM
Definition: shresdef.h:58
#define IDS_SHV_COLUMN_SIZE
Definition: shresdef.h:50
#define IDS_SHV_COLUMN_MODIFIED
Definition: shresdef.h:52
#define IDS_SHV_COLUMN_DELDATE
Definition: shresdef.h:59
@ SHCOLSTATE_TYPE_INT
Definition: shtypes.idl:122
@ SHCOLSTATE_TYPE_DATE
Definition: shtypes.idl:123
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125

Definition at line 40 of file CRecycleBin.cpp.

Referenced by CRecycleBin::GetDefaultColumnState(), CRecycleBin::GetDetailsOf(), and CRecycleBin::MapColumnToSCID().