ReactOS 0.4.17-dev-1190-g4c812f4
recyclebin.h File Reference
#include <stdarg.h>
#include <windef.h>
#include <winbase.h>
#include <winnls.h>
#include <winver.h>
#include <shellapi.h>
#include <objbase.h>
Include dependency graph for recyclebin.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _RECYCLEBINFILEIDENTITY
 
struct  _RECYCLEBINSTRING
 
struct  _DELETED_FILE_INFO
 

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COM_NO_WINDOWS_H
 
#define RECYCLEBINMAXDRIVECOUNT   ('Z' - 'A' + 1)
 
#define IRecycleBinFileFromHDELFILE(hDF)   ( (IRecycleBinFile*)(hDF) )
 
#define DeleteFileToRecycleBin   DeleteFileToRecycleBinA
 
#define EmptyRecycleBin   EmptyRecycleBinA
 
#define EnumerateRecycleBin   EnumerateRecycleBinA
 
#define INTERFACE   IRecycleBinFile
 
#define INTERFACE   IRecycleBinEnumList
 
#define INTERFACE   IRecycleBin
 

Typedefs

typedef UINT RECYCLEBINFILESIZETYPE
 
typedef struct _RECYCLEBINFILEIDENTITY RECYCLEBINFILEIDENTITY
 
typedef struct _RECYCLEBINFILEIDENTITY * PRECYCLEBINFILEIDENTITY
 
typedef struct _RECYCLEBINSTRING RECYCLEBINSTRING
 
typedef struct _RECYCLEBINSTRING * PRECYCLEBINSTRING
 
typedef struct _DELETED_FILE_INFO DELETED_FILE_INFO
 
typedef struct _DELETED_FILE_INFO * PDELETED_FILE_INFO
 
typedef BOOL(CALLBACK * PENUMERATE_RECYCLEBIN_CALLBACK) (IN PVOID Context, IN HDELFILE hDeletedFile)
 

Functions

 DECLARE_HANDLE (HDELFILE)
 
static void FreeRecycleBinString (PRECYCLEBINSTRING pRBS)
 
static void InitializeRecycleBinStringRef (PRECYCLEBINSTRING pRBS, LPCWSTR String)
 
EXTERN_C HRESULT GetRecycleBinPathFromDriveNumber (UINT Drive, LPWSTR Path)
 
BOOL WINAPI CloseRecycleBinHandle (IN HDELFILE hDeletedFile)
 
BOOL WINAPI DeleteFileToRecycleBinA (IN LPCSTR FileName)
 
BOOL WINAPI DeleteFileToRecycleBinW (IN LPCWSTR FileName)
 
BOOL WINAPI DeleteFileInRecycleBin (IN HDELFILE hDeletedFile)
 
BOOL WINAPI EmptyRecycleBinA (IN LPCSTR pszRoot OPTIONAL)
 
BOOL WINAPI EmptyRecycleBinW (IN LPCWSTR pszRoot OPTIONAL)
 
BOOL WINAPI EnumerateRecycleBinA (IN LPCSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
 
BOOL WINAPI EnumerateRecycleBinW (IN LPCWSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
 
EXTERN_C HDELFILE GetRecycleBinFileHandle (IN LPCWSTR pszRoot OPTIONAL, IN const RECYCLEBINFILEIDENTITY *pFI)
 
EXTERN_C BOOL RemoveFromRecycleBinDatabase (IN const RECYCLEBINFILEIDENTITY *pFI)
 
BOOL WINAPI RestoreFileFromRecycleBin (IN HDELFILE hDeletedFile)
 
 DECLARE_INTERFACE_ (IRecycleBinFile, IUnknown)
 
 DECLARE_INTERFACE_ (IRecycleBinEnumList, IUnknown)
 
 DECLARE_INTERFACE_ (IRecycleBin, IUnknown)
 
EXTERN_C HRESULT GetDefaultRecycleBin (IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb)
 
void CRecycleBin_NotifyRecycled (LPCWSTR OrigPath, const WIN32_FIND_DATAW *pFind, const RECYCLEBINFILEIDENTITY *pFI)
 

Variables

EXTERN_C const IID IID_IRecycleBinFile
 
EXTERN_C const IID IID_IRecycleBinEnumList
 
EXTERN_C const IID IID_IRecycleBin
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 10 of file recyclebin.h.

◆ COM_NO_WINDOWS_H

#define COM_NO_WINDOWS_H

Definition at line 11 of file recyclebin.h.

◆ DeleteFileToRecycleBin

#define DeleteFileToRecycleBin   DeleteFileToRecycleBinA

Definition at line 101 of file recyclebin.h.

◆ EmptyRecycleBin

#define EmptyRecycleBin   EmptyRecycleBinA

Definition at line 127 of file recyclebin.h.

◆ EnumerateRecycleBin

#define EnumerateRecycleBin   EnumerateRecycleBinA

Definition at line 150 of file recyclebin.h.

◆ INTERFACE [1/3]

#define INTERFACE   IRecycleBinFile

Definition at line 219 of file recyclebin.h.

◆ INTERFACE [2/3]

#define INTERFACE   IRecycleBinEnumList

Definition at line 219 of file recyclebin.h.

◆ INTERFACE [3/3]

#define INTERFACE   IRecycleBin

Definition at line 219 of file recyclebin.h.

◆ IRecycleBinFileFromHDELFILE

#define IRecycleBinFileFromHDELFILE (   hDF)    ( (IRecycleBinFile*)(hDF) )

Definition at line 50 of file recyclebin.h.

◆ RECYCLEBINMAXDRIVECOUNT

#define RECYCLEBINMAXDRIVECOUNT   ('Z' - 'A' + 1)

Definition at line 20 of file recyclebin.h.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 9 of file recyclebin.h.

Typedef Documentation

◆ DELETED_FILE_INFO

◆ PDELETED_FILE_INFO

◆ PENUMERATE_RECYCLEBIN_CALLBACK

typedef BOOL(CALLBACK * PENUMERATE_RECYCLEBIN_CALLBACK) (IN PVOID Context, IN HDELFILE hDeletedFile)

Definition at line 77 of file recyclebin.h.

◆ PRECYCLEBINFILEIDENTITY

◆ PRECYCLEBINSTRING

◆ RECYCLEBINFILEIDENTITY

◆ RECYCLEBINFILESIZETYPE

Definition at line 24 of file recyclebin.h.

◆ RECYCLEBINSTRING

Function Documentation

◆ CloseRecycleBinHandle()

BOOL WINAPI CloseRecycleBinHandle ( IN HDELFILE  hDeletedFile)

Definition at line 13 of file recyclebin.c.

15{
16 IRecycleBinFile *rbf = IRecycleBinFileFromHDELFILE(hDeletedFile);
17 HRESULT hr;
18
19 TRACE("(%p)\n", hDeletedFile);
20
21 hr = IRecycleBinFile_Release(rbf);
22 if (SUCCEEDED(hr))
23 return TRUE;
26 else
28 return FALSE;
29}
HRESULT hr
Definition: delayimp.cpp:582
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define SetLastError(x)
Definition: compat.h:752
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define IRecycleBinFileFromHDELFILE(hDF)
Definition: recyclebin.h:50
#define TRACE(s)
Definition: solgame.cpp:4
#define HRESULT_FACILITY(hr)
Definition: winerror.h:191
#define ERROR_GEN_FAILURE
Definition: winerror.h:256
#define FACILITY_WIN32
Definition: winerror.h:29
#define HRESULT_CODE(hr)
Definition: winerror.h:188

Referenced by CRecycleBinEnum::CBEnumRecycleBin(), GetRecycleBinFileHandleCallback(), and RemoveFromRecycleBinDatabase().

◆ CRecycleBin_NotifyRecycled()

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

Definition at line 266 of file CRecycleBin.cpp.

268{
270 info.LastModification = pFind->ftLastWriteTime;
271 info.DeletionTime = pFI->DeletionTime;
272 info.FileSize = pFind->nFileSizeLow;
273 info.Attributes = pFind->dwFileAttributes;
274 if (LPITEMIDLIST pidl = CreateItem(pFI->RecycledFullPath, OrigPath, info))
275 {
277 ILFree(pidl);
278 }
279}
static BOOL IsFolder(LPCITEMIDLIST pidl)
Definition: CRecycleBin.cpp:84
static void CRecycleBin_ChangeNotifyBBItem(_In_ LONG Event, _In_opt_ LPCITEMIDLIST BBItem)
static LPITEMIDLIST CreateItem(LPCWSTR pszTrash, LPCWSTR pszOrig, const DELETED_FILE_INFO &Details)
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
#define SHCNE_MKDIR
Definition: shlobj.h:1939
#define SHCNE_CREATE
Definition: shlobj.h:1937
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
FILETIME ftLastWriteTime
Definition: minwinbase.h:286
DWORD dwFileAttributes
Definition: minwinbase.h:283

Referenced by RecycleBin5::DeleteFile().

◆ DECLARE_HANDLE()

DECLARE_HANDLE ( HDELFILE  )

◆ DECLARE_INTERFACE_() [1/3]

DECLARE_INTERFACE_ ( IRecycleBin  ,
IUnknown   
)

Definition at line 220 of file recyclebin.h.

221{
223
224 /* IUnknown methods */
225 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
228
229 /* IRecycleBin methods */
232 STDMETHOD(EnumObjects)(THIS_ IRecycleBinEnumList **ppEnumList) PURE;
234
236};
void GetDirectory(LPTSTR wholepath, LPTSTR directory, BOOL CheckExisting)
Definition: move.c:65
#define PURE
Definition: basetyps.h:64
#define THIS_
Definition: basetyps.h:65
#define THIS
Definition: basetyps.h:66
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
#define STDMETHOD(m)
Definition: basetyps.h:62
_In_ BOOLEAN Release
Definition: cdrom.h:920
_Check_return_ _In_ PQUERY_INTERFACE QueryInterface
Definition: dispmprt.h:1318
REFIID riid
Definition: atlbase.h:39
LPCWSTR szPath
Definition: env.c:37
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:83
#define END_INTERFACE
Definition: objbase.h:232
#define BEGIN_INTERFACE
Definition: objbase.h:231
#define REFIID
Definition: guiddef.h:118
#define EmptyRecycleBin
Definition: recyclebin.h:127
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint16_t * LPWSTR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
#define DeleteFile
Definition: winbase.h:3487
int WINAPI EnumObjects(_In_ HDC, _In_ int, _In_ GOBJENUMPROC, _In_ LPARAM)

◆ DECLARE_INTERFACE_() [2/3]

DECLARE_INTERFACE_ ( IRecycleBinEnumList  ,
IUnknown   
)

Definition at line 201 of file recyclebin.h.

202{
204
205 /* IUnknown methods */
206 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
209
210 /* IRecycleBinEnumList methods */
211 STDMETHOD(Next)(THIS_ DWORD celt, IRecycleBinFile **rgelt, DWORD *pceltFetched) PURE;
214
216};
static T & Reset(T &sei, UINT flags=SEE_MASK_FLAG_NO_UI)
unsigned long DWORD
Definition: ntddk_ex.h:95
STDMETHOD() Skip(THIS_ ULONG celt) PURE
STDMETHOD() Next(THIS_ ULONG celt, IAssociationElement *pElement, ULONG *pceltFetched) PURE

◆ DECLARE_INTERFACE_() [3/3]

DECLARE_INTERFACE_ ( IRecycleBinFile  ,
IUnknown   
)

Definition at line 174 of file recyclebin.h.

175{
177
178 /* IUnknown methods */
179 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
182
183 /* IRecycleBinFile methods */
184 STDMETHOD(IsEqualIdentity)(THIS_ const RECYCLEBINFILEIDENTITY *pFI) PURE;
186 STDMETHOD(GetLastModificationTime)(THIS_ FILETIME *pLastModificationTime) PURE;
187 STDMETHOD(GetDeletionTime)(THIS_ FILETIME *pDeletionTime) PURE;
190 STDMETHOD(GetAttributes)(THIS_ DWORD *pAttributes) PURE;
193 STDMETHOD(Restore)(THIS) PURE;
194 STDMETHOD(RemoveFromDatabase)(THIS) PURE;
195
197};
BOOL Delete(LPCTSTR ServiceName)
Definition: delete.c:12
static PWCHAR GetFileName(PWCHAR Path)
Definition: cabinet.c:387
Definition: bufpool.h:45
#define BufferSize
Definition: mmc.h:75
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
BOOL GetPhysicalFileSize(LPCWSTR pszPath, PULARGE_INTEGER Size)
Definition: filedefext.cpp:38
static LRESULT GetInfo(const CodecInfo *pi, ICINFO *icinfo, DWORD dwSize)
Definition: msrle32.c:1168
ULONG_PTR SIZE_T
Definition: typedefs.h:80
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
Definition: wdfdevice.h:4445

◆ DeleteFileInRecycleBin()

BOOL WINAPI DeleteFileInRecycleBin ( IN HDELFILE  hDeletedFile)

Definition at line 94 of file recyclebin.c.

96{
97 IRecycleBinFile *rbf = IRecycleBinFileFromHDELFILE(hDeletedFile);
98 HRESULT hr;
99
100 TRACE("(%p)\n", hDeletedFile);
101
102 hr = IRecycleBinFile_Delete(rbf);
103
104 if (SUCCEEDED(hr))
105 return TRUE;
108 else
110 return FALSE;
111}

◆ DeleteFileToRecycleBinA()

BOOL WINAPI DeleteFileToRecycleBinA ( IN LPCSTR  FileName)

Definition at line 32 of file recyclebin.c.

34{
35 int len;
36 LPWSTR FileNameW = NULL;
37 BOOL ret = FALSE;
38
39 TRACE("(%s)\n", debugstr_a(FileName));
40
41 /* Check parameters */
42 if (FileName == NULL)
43 {
45 goto cleanup;
46 }
47
49 if (len == 0)
50 goto cleanup;
51 FileNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
52 if (!FileNameW)
53 {
55 goto cleanup;
56 }
57 if (MultiByteToWideChar(CP_ACP, 0, FileName, -1, FileNameW, len) == 0)
58 goto cleanup;
59
60 ret = DeleteFileToRecycleBinW(FileNameW);
61
63 HeapFree(GetProcessHeap(), 0, FileNameW);
64 return ret;
65}
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#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
static void cleanup(void)
Definition: main.c:1335
BOOL WINAPI DeleteFileToRecycleBinW(IN LPCWSTR FileName)
Definition: recyclebin.c:68
return ret
Definition: mutex.c:147
unsigned int BOOL
Definition: ntddk_ex.h:94
GLenum GLsizei len
Definition: glext.h:6722
#define debugstr_a
Definition: kernel32.h:31
short WCHAR
Definition: pedump.c:58

◆ DeleteFileToRecycleBinW()

BOOL WINAPI DeleteFileToRecycleBinW ( IN LPCWSTR  FileName)

Definition at line 68 of file recyclebin.c.

70{
71 IRecycleBin *prb;
72 HRESULT hr;
73
74 TRACE("(%s)\n", debugstr_w(FileName));
75
77 if (!SUCCEEDED(hr))
78 goto cleanup;
79
80 hr = IRecycleBin_DeleteFile(prb, FileName);
81 IRecycleBin_Release(prb);
82
84 if (SUCCEEDED(hr))
85 return TRUE;
88 else
90 return FALSE;
91}
EXTERN_C HRESULT GetDefaultRecycleBin(IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb)
Definition: recyclebin.c:322
#define debugstr_w
Definition: kernel32.h:32

Referenced by DeleteFileToRecycleBinA().

◆ EmptyRecycleBinA()

BOOL WINAPI EmptyRecycleBinA ( IN LPCSTR pszRoot  OPTIONAL)

Definition at line 114 of file recyclebin.c.

116{
117 int len;
118 LPWSTR szRootW = NULL;
119 BOOL ret = FALSE;
120
121 TRACE("(%s)\n", debugstr_a(pszRoot));
122
123 if (pszRoot)
124 {
125 len = MultiByteToWideChar(CP_ACP, 0, pszRoot, -1, NULL, 0);
126 if (len == 0)
127 goto cleanup;
128 szRootW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
129 if (!szRootW)
130 {
132 goto cleanup;
133 }
134 if (MultiByteToWideChar(CP_ACP, 0, pszRoot, -1, szRootW, len) == 0)
135 goto cleanup;
136 }
137
138 ret = EmptyRecycleBinW(szRootW);
139
140cleanup:
141 HeapFree(GetProcessHeap(), 0, szRootW);
142 return ret;
143}
BOOL WINAPI EmptyRecycleBinW(IN LPCWSTR pszRoot OPTIONAL)
Definition: recyclebin.c:146

◆ EmptyRecycleBinW()

BOOL WINAPI EmptyRecycleBinW ( IN LPCWSTR pszRoot  OPTIONAL)

Definition at line 146 of file recyclebin.c.

148{
149 IRecycleBin *prb;
150 HRESULT hr;
151
152 TRACE("(%s)\n", debugstr_w(pszRoot));
153
154 hr = GetDefaultRecycleBin(pszRoot, &prb);
155 if (!SUCCEEDED(hr))
156 goto cleanup;
157
158 hr = IRecycleBin_EmptyRecycleBin(prb);
159 IRecycleBin_Release(prb);
160
161cleanup:
162 if (SUCCEEDED(hr))
163 return TRUE;
166 else
168 return FALSE;
169}

Referenced by EmptyRecycleBinA(), and SHEmptyRecycleBinW().

◆ EnumerateRecycleBinA()

BOOL WINAPI EnumerateRecycleBinA ( IN LPCSTR pszRoot  OPTIONAL,
IN PENUMERATE_RECYCLEBIN_CALLBACK  pFnCallback,
IN PVOID Context  OPTIONAL 
)

Definition at line 172 of file recyclebin.c.

176{
177 int len;
178 LPWSTR szRootW = NULL;
179 BOOL ret = FALSE;
180
181 TRACE("(%s, %p, %p)\n", debugstr_a(pszRoot), pFnCallback, Context);
182
183 if (pszRoot)
184 {
185 len = MultiByteToWideChar(CP_ACP, 0, pszRoot, -1, NULL, 0);
186 if (len == 0)
187 goto cleanup;
188 szRootW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
189 if (!szRootW)
190 {
192 goto cleanup;
193 }
194 if (MultiByteToWideChar(CP_ACP, 0, pszRoot, -1, szRootW, len) == 0)
195 goto cleanup;
196 }
197
198 ret = EnumerateRecycleBinW(szRootW, pFnCallback, Context);
199
200cleanup:
201 HeapFree(GetProcessHeap(), 0, szRootW);
202 return ret;
203}
BOOL WINAPI EnumerateRecycleBinW(IN LPCWSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
Definition: recyclebin.c:206
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81

◆ EnumerateRecycleBinW()

BOOL WINAPI EnumerateRecycleBinW ( IN LPCWSTR pszRoot  OPTIONAL,
IN PENUMERATE_RECYCLEBIN_CALLBACK  pFnCallback,
IN PVOID Context  OPTIONAL 
)

Definition at line 206 of file recyclebin.c.

210{
211 IRecycleBin *prb = NULL;
212 IRecycleBinEnumList *prbel = NULL;
213 IRecycleBinFile *prbf;
214 HRESULT hr;
215
216 TRACE("(%s, %p, %p)\n", debugstr_w(pszRoot), pFnCallback, Context);
217
219 if (!SUCCEEDED(hr))
220 goto cleanup;
221
222 hr = IRecycleBin_EnumObjects(prb, &prbel);
223 if (!SUCCEEDED(hr))
224 goto cleanup;
225 while (TRUE)
226 {
227 hr = IRecycleBinEnumList_Next(prbel, 1, &prbf, NULL);
228 if (hr == S_FALSE)
229 {
230 hr = S_OK;
231 goto cleanup;
232 }
233 else if (!SUCCEEDED(hr))
234 goto cleanup;
235 if (!pFnCallback(Context, (HDELFILE)prbf))
236 {
239 goto cleanup;
240 }
241 }
242
243cleanup:
244 if (prb)
245 IRecycleBin_Release(prb);
246 if (prbel)
247 IRecycleBinEnumList_Release(prbel);
248 if (SUCCEEDED(hr))
249 return TRUE;
252 else
254 return FALSE;
255}
unsigned int UINT
Definition: sysinfo.c:13
#define S_OK
Definition: intsafe.h:52
#define error(str)
Definition: mkdosfs.c:1605
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210

Referenced by EnumerateRecycleBinA(), GetRecycleBinFileHandle(), and CRecycleBinEnum::Initialize().

◆ FreeRecycleBinString()

static void FreeRecycleBinString ( PRECYCLEBINSTRING  pRBS)
inlinestatic

Definition at line 55 of file recyclebin.h.

56{
57 SHFree(pRBS->Alloc);
58 pRBS->String = pRBS->Alloc = NULL;
59}
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370

Referenced by CRecycleBinEnum::CBEnumRecycleBin().

◆ GetDefaultRecycleBin()

EXTERN_C HRESULT GetDefaultRecycleBin ( IN LPCWSTR pszVolume  OPTIONAL,
OUT IRecycleBin **  pprb 
)

Definition at line 322 of file recyclebin.c.

325{
326 IUnknown *pUnk;
327 HRESULT hr;
328
329 TRACE("(%s, %p)\n", debugstr_w(pszVolume), pprb);
330
331 if (!pprb)
332 return E_POINTER;
333
334 if (!pszVolume)
336 else
337 {
338 WCHAR szRootPath[4] = { *pszVolume, L':', L'\\', UNICODE_NULL };
339 int drive = PathGetDriveNumberW(pszVolume);
340 if (drive < 0 || pszVolume[2] != L'\\')
342
343 /* For now, only support this type of recycle bins... */
344 hr = RecycleBin5_Constructor(szRootPath, &pUnk);
345 }
346 if (!SUCCEEDED(hr))
347 return hr;
348 hr = IUnknown_QueryInterface(pUnk, &IID_IRecycleBin, (void **)pprb);
349 IUnknown_Release(pUnk);
350 return hr;
351}
#define ERROR_INVALID_NAME
Definition: compat.h:103
EXTERN_C int WINAPI PathGetDriveNumberW(_In_ LPCWSTR)
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:41
#define L(x)
Definition: resources.c:13
#define UNICODE_NULL
EXTERN_C const IID IID_IRecycleBin
Definition: recyclebin.h:241
EXTERN_C HRESULT RecycleBinGeneric_Constructor(OUT IUnknown **ppUnknown)
EXTERN_C HRESULT RecycleBin5_Constructor(_In_ LPCWSTR VolumePath, _Out_ IUnknown **ppUnknown)
#define E_POINTER
Definition: winerror.h:3480

Referenced by RecycleBinGeneric::DeleteFile(), DeleteFileToRecycleBinW(), RecycleBinGeneric::EmptyRecycleBin(), EmptyRecycleBinW(), EnumerateRecycleBinW(), GetRecycleBinPathFromDriveNumber(), RecycleBinGenericEnum::Next(), and SHQueryRecycleBinW().

◆ GetRecycleBinFileHandle()

EXTERN_C HDELFILE GetRecycleBinFileHandle ( IN LPCWSTR pszRoot  OPTIONAL,
IN const RECYCLEBINFILEIDENTITY *  pFI 
)

Definition at line 278 of file recyclebin.c.

281{
282 BBENUMFILECONTEXT context = { pFI, NULL };
284 return context.hDelFile;
285}
static BOOL CALLBACK GetRecycleBinFileHandleCallback(IN PVOID Context, IN HDELFILE hDeletedFile)
Definition: recyclebin.c:264
Definition: http.c:7783

Referenced by RemoveFromRecycleBinDatabase().

◆ GetRecycleBinPathFromDriveNumber()

EXTERN_C HRESULT GetRecycleBinPathFromDriveNumber ( UINT  Drive,
LPWSTR  Path 
)

Definition at line 354 of file recyclebin.c.

355{
356 const WCHAR volume[] = { LOWORD('A' + Drive), ':', '\\', '\0' };
357 IRecycleBin *pRB;
359 if (SUCCEEDED(hr))
360 {
361 hr = IRecycleBin_GetDirectory(pRB, Path);
362 IRecycleBin_Release(pRB);
363 }
364 return hr;
365}
PRTL_UNICODE_STRING_BUFFER Path
PWCHAR Drive
Definition: chkdsk.c:73
#define LOWORD(l)
Definition: pedump.c:82

Referenced by CRecycleBin::GetFSFolderForItem(), and CRecycleBinFolderViewCB::RegisterChangeNotify().

◆ InitializeRecycleBinStringRef()

static void InitializeRecycleBinStringRef ( PRECYCLEBINSTRING  pRBS,
LPCWSTR  String 
)
inlinestatic

Definition at line 62 of file recyclebin.h.

63{
64 pRBS->String = String;
65 pRBS->Alloc = NULL;
66}
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439

Referenced by RecycleBin5File::GetInfo().

◆ RemoveFromRecycleBinDatabase()

EXTERN_C BOOL RemoveFromRecycleBinDatabase ( IN const RECYCLEBINFILEIDENTITY *  pFI)

Definition at line 288 of file recyclebin.c.

290{
291 BOOL ret = FALSE;
292 HDELFILE hDelFile = GetRecycleBinFileHandle(NULL, pFI);
293 if (hDelFile)
294 {
295 IRecycleBinFile *rbf = IRecycleBinFileFromHDELFILE(hDelFile);
296 ret = SUCCEEDED(IRecycleBinFile_RemoveFromDatabase(rbf));
297 CloseRecycleBinHandle(hDelFile);
298 }
299 return ret;
300}
BOOL WINAPI CloseRecycleBinHandle(IN HDELFILE hDeletedFile)
Definition: recyclebin.c:13
EXTERN_C HDELFILE GetRecycleBinFileHandle(IN LPCWSTR pszRoot OPTIONAL, IN const RECYCLEBINFILEIDENTITY *pFI)
Definition: recyclebin.c:278

Referenced by FileOpCallback().

◆ RestoreFileFromRecycleBin()

BOOL WINAPI RestoreFileFromRecycleBin ( IN HDELFILE  hDeletedFile)

Definition at line 303 of file recyclebin.c.

305{
306 IRecycleBinFile *rbf = IRecycleBinFileFromHDELFILE(hDeletedFile);
307 HRESULT hr;
308
309 TRACE("(%p)\n", hDeletedFile);
310
311 hr = IRecycleBinFile_Restore(rbf);
312 if (SUCCEEDED(hr))
313 return TRUE;
316 else
318 return FALSE;
319}

Variable Documentation

◆ IID_IRecycleBin

◆ IID_IRecycleBinEnumList

◆ IID_IRecycleBinFile

EXTERN_C const IID IID_IRecycleBinFile

Definition at line 239 of file recyclebin.h.

Referenced by RecycleBin5File::QueryInterface().