ReactOS 0.4.16-dev-522-gb68104a
recyclebin.c File Reference
Include dependency graph for recyclebin.c:

Go to the source code of this file.

Classes

struct  _BBENUMFILECONTEXT
 

Typedefs

typedef struct _BBENUMFILECONTEXT BBENUMFILECONTEXT
 

Functions

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)
 
static BOOL CALLBACK GetRecycleBinFileHandleCallback (IN PVOID Context, IN HDELFILE hDeletedFile)
 
EXTERN_C HDELFILE GetRecycleBinFileHandle (IN LPCWSTR pszRoot OPTIONAL, IN const RECYCLEBINFILEIDENTITY *pFI)
 
BOOL WINAPI RestoreFileFromRecycleBin (IN HDELFILE hDeletedFile)
 
EXTERN_C HRESULT GetDefaultRecycleBin (IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb)
 
EXTERN_C HRESULT GetRecycleBinPathFromDriveNumber (UINT Drive, LPWSTR Path)
 

Typedef Documentation

◆ BBENUMFILECONTEXT

Function Documentation

◆ CloseRecycleBinHandle()

BOOL WINAPI CloseRecycleBinHandle ( IN HDELFILE  hDeletedFile)

Definition at line 12 of file recyclebin.c.

14{
15 IRecycleBinFile *rbf = IRecycleBinFileFromHDELFILE(hDeletedFile);
16 HRESULT hr;
17
18 TRACE("(%p)\n", hDeletedFile);
19
20 hr = IRecycleBinFile_Release(rbf);
21 if (SUCCEEDED(hr))
22 return TRUE;
25 else
27 return FALSE;
28}
#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
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
#define HRESULT_FACILITY(hr)
Definition: winerror.h:79
#define ERROR_GEN_FAILURE
Definition: winerror.h:134
#define FACILITY_WIN32
Definition: winerror.h:27
#define HRESULT_CODE(hr)
Definition: winerror.h:76

Referenced by CRecycleBinEnum::CBEnumRecycleBin(), GetRecycleBinFileHandleCallback(), and CRecycleBinItemContextMenu::InvokeCommand().

◆ DeleteFileInRecycleBin()

BOOL WINAPI DeleteFileInRecycleBin ( IN HDELFILE  hDeletedFile)

Definition at line 93 of file recyclebin.c.

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

Referenced by CRecycleBinItemContextMenu::InvokeCommand().

◆ DeleteFileToRecycleBinA()

BOOL WINAPI DeleteFileToRecycleBinA ( IN LPCSTR  FileName)

Definition at line 31 of file recyclebin.c.

33{
34 int len;
35 LPWSTR FileNameW = NULL;
36 BOOL ret = FALSE;
37
38 TRACE("(%s)\n", debugstr_a(FileName));
39
40 /* Check parameters */
41 if (FileName == NULL)
42 {
44 goto cleanup;
45 }
46
48 if (len == 0)
49 goto cleanup;
50 FileNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
51 if (!FileNameW)
52 {
54 goto cleanup;
55 }
56 if (MultiByteToWideChar(CP_ACP, 0, FileName, -1, FileNameW, len) == 0)
57 goto cleanup;
58
59 ret = DeleteFileToRecycleBinW(FileNameW);
60
62 HeapFree(GetProcessHeap(), 0, FileNameW);
63 return ret;
64}
#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:67
unsigned int BOOL
Definition: ntddk_ex.h:94
GLenum GLsizei len
Definition: glext.h:6722
#define debugstr_a
Definition: kernel32.h:31
int ret
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ DeleteFileToRecycleBinW()

BOOL WINAPI DeleteFileToRecycleBinW ( IN LPCWSTR  FileName)

Definition at line 67 of file recyclebin.c.

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

Referenced by DeleteFileToRecycleBinA().

◆ EmptyRecycleBinA()

BOOL WINAPI EmptyRecycleBinA ( IN LPCSTR pszRoot  OPTIONAL)

Definition at line 113 of file recyclebin.c.

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

◆ EmptyRecycleBinW()

BOOL WINAPI EmptyRecycleBinW ( IN LPCWSTR pszRoot  OPTIONAL)

Definition at line 145 of file recyclebin.c.

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

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 171 of file recyclebin.c.

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

◆ EnumerateRecycleBinW()

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

Definition at line 205 of file recyclebin.c.

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

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

◆ GetDefaultRecycleBin()

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

Definition at line 306 of file recyclebin.c.

309{
310 IUnknown *pUnk;
311 HRESULT hr;
312
313 TRACE("(%s, %p)\n", debugstr_w(pszVolume), pprb);
314
315 if (!pprb)
316 return E_POINTER;
317
318 if (!pszVolume)
320 else
321 {
322 /* FIXME: do a better validation! */
323 if (wcslen(pszVolume) != 3 || pszVolume[1] != ':' || pszVolume[2] != '\\')
325
326 /* For now, only support this type of recycle bins... */
327 hr = RecycleBin5_Constructor(pszVolume, &pUnk);
328 }
329 if (!SUCCEEDED(hr))
330 return hr;
331 hr = IUnknown_QueryInterface(pUnk, &IID_IRecycleBin, (void **)pprb);
332 IUnknown_Release(pUnk);
333 return hr;
334}
#define ERROR_INVALID_NAME
Definition: compat.h:103
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
EXTERN_C const IID IID_IRecycleBin
Definition: recyclebin.h:236
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:2365

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 277 of file recyclebin.c.

280{
281 BBENUMFILECONTEXT context = { pFI, NULL };
283 return context.hDelFile;
284}
static BOOL CALLBACK GetRecycleBinFileHandleCallback(IN PVOID Context, IN HDELFILE hDeletedFile)
Definition: recyclebin.c:263
Definition: http.c:7252

Referenced by GetRecycleBinFileHandleFromItem().

◆ GetRecycleBinFileHandleCallback()

static BOOL CALLBACK GetRecycleBinFileHandleCallback ( IN PVOID  Context,
IN HDELFILE  hDeletedFile 
)
static

Definition at line 263 of file recyclebin.c.

264{
266 IRecycleBinFile *pRBF = IRecycleBinFileFromHDELFILE(hDeletedFile);
267 if (IRecycleBinFile_IsEqualIdentity(pRBF, pCtx->pFI) == S_OK)
268 {
269 pCtx->hDelFile = hDeletedFile;
270 return FALSE;
271 }
272 CloseRecycleBinHandle(hDeletedFile);
273 return TRUE;
274}
BOOL WINAPI CloseRecycleBinHandle(IN HDELFILE hDeletedFile)
Definition: recyclebin.c:12
const RECYCLEBINFILEIDENTITY * pFI
Definition: recyclebin.c:258

Referenced by GetRecycleBinFileHandle().

◆ GetRecycleBinPathFromDriveNumber()

EXTERN_C HRESULT GetRecycleBinPathFromDriveNumber ( UINT  Drive,
LPWSTR  Path 
)

Definition at line 337 of file recyclebin.c.

338{
339 const WCHAR volume[] = { LOWORD('A' + Drive), ':', '\\', '\0' };
340 IRecycleBin *pRB;
342 if (SUCCEEDED(hr))
343 {
344 hr = IRecycleBin_GetDirectory(pRB, Path);
345 IRecycleBin_Release(pRB);
346 }
347 return hr;
348}
PRTL_UNICODE_STRING_BUFFER Path
PWCHAR Drive
Definition: chkdsk.c:73
#define LOWORD(l)
Definition: pedump.c:82

Referenced by CRecycleBin::GetFSFolderForItem().

◆ RestoreFileFromRecycleBin()

BOOL WINAPI RestoreFileFromRecycleBin ( IN HDELFILE  hDeletedFile)

Definition at line 287 of file recyclebin.c.

289{
290 IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile;
291 HRESULT hr;
292
293 TRACE("(%p)\n", hDeletedFile);
294
295 hr = IRecycleBinFile_Restore(rbf);
296 if (SUCCEEDED(hr))
297 return TRUE;
300 else
302 return FALSE;
303}

Referenced by CRecycleBinItemContextMenu::InvokeCommand().