ReactOS 0.4.16-dev-983-g23ad936
recyclebin.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef __cplusplus
4extern "C" {
5#endif
6
7#include <stdarg.h>
8
9#define WIN32_NO_STATUS
10#define _INC_WINDOWS
11#define COM_NO_WINDOWS_H
12
13#include <windef.h>
14#include <winbase.h>
15#include <winnls.h>
16#include <winver.h>
17#include <shellapi.h>
18#include <objbase.h>
19
20#define RECYCLEBINMAXDRIVECOUNT 26
21
22/* Structures used by the API Interface */
23
25
27{
29 LPCWSTR RecycledFullPath; /* "C:\Recycled\Dc1.ext" etc. */
31
32typedef struct _RECYCLEBINSTRING
33{
37
38typedef struct _DELETED_FILE_INFO
39{
47
48/* Distinct handle type for deleted file/folder */
50#define IRecycleBinFileFromHDELFILE(hDF) ( (IRecycleBinFile*)(hDF) )
51
52/* API Interface */
53
54static inline void
56{
57 SHFree(pRBS->Alloc);
58 pRBS->String = pRBS->Alloc = NULL;
59}
60
61static inline void
63{
64 pRBS->String = String;
65 pRBS->Alloc = NULL;
66}
67
70
71/* Function called for each deleted file in the recycle bin
72 * Context: value given by the caller of the EnumerateRecycleBin function
73 * hDeletedFile: a handle to the deleted file
74 * Returning FALSE stops the enumeration.
75 * Remarks: the handle must be closed with the CloseRecycleBinHandle function
76 */
77typedef BOOL (CALLBACK *PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HDELFILE hDeletedFile);
78
79/* Closes a file deleted handle.
80 * hDeletedFile: the handle to close
81 * Returns TRUE if operation succeeded, FALSE otherwise.
82 * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback
83 */
86 IN HDELFILE hDeletedFile);
87
88/* Moves a file to the recycle bin.
89 * FileName: the name of the file to move the recycle bin
90 * Returns TRUE if operation succeeded, FALSE otherwise.
91 */
98#ifdef UNICODE
99#define DeleteFileToRecycleBin DeleteFileToRecycleBinW
100#else
101#define DeleteFileToRecycleBin DeleteFileToRecycleBinA
102#endif
103
104/* Deletes a file in the recycle bin.
105 * hDeletedFile: handle of the deleted file to delete
106 * Returns TRUE if operation succeeded, FALSE otherwise.
107 * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback
108 */
111 IN HDELFILE hDeletedFile);
112
113/* Removes all elements contained in a recycle bin
114 * pszRoot: the name of the drive containing the recycle bin
115 * Returns TRUE if operation succeeded, FALSE otherwise.
116 * Remarks: 'pszRoot' can be NULL to mean 'all recycle bins'.
117 */
120 IN LPCSTR pszRoot OPTIONAL);
123 IN LPCWSTR pszRoot OPTIONAL);
124#ifdef UNICODE
125#define EmptyRecycleBin EmptyRecycleBinW
126#else
127#define EmptyRecycleBin EmptyRecycleBinA
128#endif
129
130/* Enumerate contents of a recycle bin.
131 * pszRoot: the name of the drive containing the recycle bin
132 * pFnCallback: callback function to be called for each deleted item found
133 * Context: some value which will be given back in the callback function
134 * Returns TRUE if operation succeeded, FALSE otherwise.
135 * Remarks: 'pszRoot' can be NULL to mean 'all recycle bins'.
136 */
139 IN LPCSTR pszRoot OPTIONAL,
144 IN LPCWSTR pszRoot OPTIONAL,
147#ifdef UNICODE
148#define EnumerateRecycleBin EnumerateRecycleBinW
149#else
150#define EnumerateRecycleBin EnumerateRecycleBinA
151#endif
152
153EXTERN_C HDELFILE
155 IN LPCWSTR pszRoot OPTIONAL,
156 IN const RECYCLEBINFILEIDENTITY *pFI);
157
160 IN const RECYCLEBINFILEIDENTITY *pFI);
161
162/* Restores a deleted file
163 * hDeletedFile: handle of the deleted file to restore
164 * Returns TRUE if operation succeeded, FALSE otherwise.
165 * Remarks: if the function succeeds, the handle is not valid anymore.
166 */
169 IN HDELFILE hDeletedFile);
170
171/* COM interface */
172
173#define INTERFACE IRecycleBinFile
175{
177
178 /* IUnknown methods */
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};
198#undef INTERFACE
199
200#define INTERFACE IRecycleBinEnumList
201DECLARE_INTERFACE_(IRecycleBinEnumList, IUnknown)
202{
204
205 /* IUnknown methods */
209
210 /* IRecycleBinEnumList methods */
211 STDMETHOD(Next)(THIS_ DWORD celt, IRecycleBinFile **rgelt, DWORD *pceltFetched) PURE;
214
216};
217#undef INTERFACE
218
219#define INTERFACE IRecycleBin
221{
223
224 /* IUnknown methods */
228
229 /* IRecycleBin methods */
232 STDMETHOD(EnumObjects)(THIS_ IRecycleBinEnumList **ppEnumList) PURE;
234
236};
237#undef INTERFACE
238
242
243#if (!defined(__cplusplus) || defined(CINTERFACE)) && defined(COBJMACROS)
244#define IRecycleBinFile_QueryInterface(This, riid, ppvObject) \
245 (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
246#define IRecycleBinFile_AddRef(This) \
247 (This)->lpVtbl->AddRef(This)
248#define IRecycleBinFile_Release(This) \
249 (This)->lpVtbl->Release(This)
250#define IRecycleBinFile_IsEqualIdentity(This, pFI) \
251 (This)->lpVtbl->IsEqualIdentity(This, pFI)
252#define IRecycleBinFile_GetInfo(This, pInfo) \
253 (This)->lpVtbl->GetInfo(This, pInfo)
254#define IRecycleBinFile_GetLastModificationTime(This, pLastModificationTime) \
255 (This)->lpVtbl->GetLastModificationTime(This, pLastModificationTime)
256#define IRecycleBinFile_GetDeletionTime(This, pDeletionTime) \
257 (This)->lpVtbl->GetDeletionTime(This, pDeletionTime)
258#define IRecycleBinFile_GetFileSize(This, pFileSize) \
259 (This)->lpVtbl->GetFileSize(This, pFileSize)
260#define IRecycleBinFile_GetPhysicalFileSize(This, pPhysicalFileSize) \
261 (This)->lpVtbl->GetPhysicalFileSize(This, pPhysicalFileSize)
262#define IRecycleBinFile_GetAttributes(This, pAttributes) \
263 (This)->lpVtbl->GetAttributes(This, pAttributes)
264#define IRecycleBinFile_GetFileName(This, BufferSize, Buffer, RequiredSize) \
265 (This)->lpVtbl->GetFileName(This, BufferSize, Buffer, RequiredSize)
266#define IRecycleBinFile_Delete(This) \
267 (This)->lpVtbl->Delete(This)
268#define IRecycleBinFile_Restore(This) \
269 (This)->lpVtbl->Restore(This)
270#define IRecycleBinFile_RemoveFromDatabase(This) \
271 (This)->lpVtbl->RemoveFromDatabase(This)
272
273#define IRecycleBinEnumList_QueryInterface(This, riid, ppvObject) \
274 (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
275#define IRecycleBinEnumList_AddRef(This) \
276 (This)->lpVtbl->AddRef(This)
277#define IRecycleBinEnumList_Release(This) \
278 (This)->lpVtbl->Release(This)
279#define IRecycleBinEnumList_Next(This, celt, rgelt, pceltFetched) \
280 (This)->lpVtbl->Next(This, celt, rgelt, pceltFetched)
281#define IRecycleBinEnumList_Skip(This, celt) \
282 (This)->lpVtbl->Skip(This, celt)
283#define IRecycleBinEnumList_Reset(This) \
284 (This)->lpVtbl->Reset(This)
285
286#define IRecycleBin_QueryInterface(This, riid, ppvObject) \
287 (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
288#define IRecycleBin_AddRef(This) \
289 (This)->lpVtbl->AddRef(This)
290#define IRecycleBin_Release(This) \
291 (This)->lpVtbl->Release(This)
292#define IRecycleBin_DeleteFile(This, szFileName) \
293 (This)->lpVtbl->DeleteFile(This, szFileName)
294#define IRecycleBin_EmptyRecycleBin(This) \
295 (This)->lpVtbl->EmptyRecycleBin(This)
296#define IRecycleBin_EnumObjects(This, ppEnumList) \
297 (This)->lpVtbl->EnumObjects(This, ppEnumList)
298#define IRecycleBin_GetDirectory(This, szPath) \
299 (This)->lpVtbl->GetDirectory(This, szPath)
300#endif
301
304 IN LPCWSTR pszVolume OPTIONAL,
305 OUT IRecycleBin **pprb);
306
307/* Recycle Bin shell folder internal API */
308void CRecycleBin_NotifyRecycled(LPCWSTR OrigPath, const WIN32_FIND_DATAW *pFind,
309 const RECYCLEBINFILEIDENTITY *pFI);
310
311
312#ifdef __cplusplus
313}
314#endif
PRTL_UNICODE_STRING_BUFFER Path
BOOL Delete(LPCTSTR ServiceName)
Definition: delete.c:12
void GetDirectory(LPTSTR wholepath, LPTSTR directory, BOOL CheckExisting)
Definition: move.c:65
PWCHAR Drive
Definition: chkdsk.c:73
#define DECLARE_INTERFACE_(i, b)
Definition: basetyps.h:78
#define PURE
Definition: basetyps.h:64
#define THIS_
Definition: basetyps.h:65
#define EXTERN_C
Definition: basetyps.h:12
#define THIS
Definition: basetyps.h:66
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
#define STDMETHOD(m)
Definition: basetyps.h:62
static PWCHAR GetFileName(PWCHAR Path)
Definition: cabinet.c:387
_In_ BOOLEAN Release
Definition: cdrom.h:920
Definition: bufpool.h:45
#define BufferSize
Definition: mmc.h:75
#define NULL
Definition: types.h:112
#define CALLBACK
Definition: compat.h:35
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
BOOL GetPhysicalFileSize(LPCWSTR PathBuffer, PULARGE_INTEGER Size)
Definition: filedefext.cpp:32
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
REFIID riid
Definition: atlbase.h:39
#define DECLARE_HANDLE(name)
Definition: mimeole.idl:23
LPCWSTR szPath
Definition: env.c:37
static HRESULT QueryInterface(REFIID, void **)
Definition: events.c:2587
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
static LRESULT GetInfo(const CodecInfo *pi, ICINFO *icinfo, DWORD dwSize)
Definition: msrle32.c:1168
unsigned int UINT
Definition: ndis.h:50
#define BOOL
Definition: nt_native.h:43
#define END_INTERFACE
Definition: objbase.h:232
#define BEGIN_INTERFACE
Definition: objbase.h:231
#define REFIID
Definition: guiddef.h:118
EXTERN_C const IID IID_IRecycleBin
Definition: recyclebin.h:241
BOOL WINAPI EnumerateRecycleBinW(IN LPCWSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
Definition: recyclebin.c:205
struct _RECYCLEBINFILEIDENTITY RECYCLEBINFILEIDENTITY
EXTERN_C HRESULT GetRecycleBinPathFromDriveNumber(UINT Drive, LPWSTR Path)
Definition: recyclebin.c:352
BOOL WINAPI EnumerateRecycleBinA(IN LPCSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
Definition: recyclebin.c:171
BOOL WINAPI DeleteFileToRecycleBinA(IN LPCSTR FileName)
Definition: recyclebin.c:31
BOOL(CALLBACK * PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HDELFILE hDeletedFile)
Definition: recyclebin.h:77
BOOL WINAPI DeleteFileToRecycleBinW(IN LPCWSTR FileName)
Definition: recyclebin.c:67
EXTERN_C HRESULT GetDefaultRecycleBin(IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb)
Definition: recyclebin.c:321
static void FreeRecycleBinString(PRECYCLEBINSTRING pRBS)
Definition: recyclebin.h:55
EXTERN_C BOOL RemoveFromRecycleBinDatabase(IN const RECYCLEBINFILEIDENTITY *pFI)
Definition: recyclebin.c:287
struct _RECYCLEBINSTRING * PRECYCLEBINSTRING
BOOL WINAPI CloseRecycleBinHandle(IN HDELFILE hDeletedFile)
Definition: recyclebin.c:12
static void InitializeRecycleBinStringRef(PRECYCLEBINSTRING pRBS, LPCWSTR String)
Definition: recyclebin.h:62
struct _DELETED_FILE_INFO * PDELETED_FILE_INFO
void CRecycleBin_NotifyRecycled(LPCWSTR OrigPath, const WIN32_FIND_DATAW *pFind, const RECYCLEBINFILEIDENTITY *pFI)
BOOL WINAPI DeleteFileInRecycleBin(IN HDELFILE hDeletedFile)
Definition: recyclebin.c:93
BOOL WINAPI RestoreFileFromRecycleBin(IN HDELFILE hDeletedFile)
Definition: recyclebin.c:302
struct _RECYCLEBINSTRING RECYCLEBINSTRING
BOOL WINAPI EmptyRecycleBinA(IN LPCSTR pszRoot OPTIONAL)
Definition: recyclebin.c:113
BOOL WINAPI EmptyRecycleBinW(IN LPCWSTR pszRoot OPTIONAL)
Definition: recyclebin.c:145
UINT RECYCLEBINFILESIZETYPE
Definition: recyclebin.h:24
EXTERN_C const IID IID_IRecycleBinFile
Definition: recyclebin.h:239
EXTERN_C HDELFILE GetRecycleBinFileHandle(IN LPCWSTR pszRoot OPTIONAL, IN const RECYCLEBINFILEIDENTITY *pFI)
Definition: recyclebin.c:277
struct _DELETED_FILE_INFO DELETED_FILE_INFO
struct _RECYCLEBINFILEIDENTITY * PRECYCLEBINFILEIDENTITY
EXTERN_C const IID IID_IRecycleBinEnumList
Definition: recyclebin.h:240
#define EmptyRecycleBin
Definition: recyclebin.h:127
STDMETHOD() Skip(THIS_ ULONG celt) PURE
STDMETHOD() Reset(THIS) PURE
STDMETHOD() Next(THIS_ ULONG celt, IAssociationElement *pElement, ULONG *pceltFetched) PURE
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
RECYCLEBINFILESIZETYPE FileSize
Definition: recyclebin.h:42
RECYCLEBINSTRING RecycledFullPath
Definition: recyclebin.h:45
FILETIME DeletionTime
Definition: recyclebin.h:41
RECYCLEBINSTRING OriginalFullPath
Definition: recyclebin.h:44
FILETIME LastModification
Definition: recyclebin.h:40
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
Definition: wdfdevice.h:4439
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
#define DeleteFile
Definition: winbase.h:3795
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
#define WINAPI
Definition: msvc.h:6
int WINAPI EnumObjects(_In_ HDC, _In_ int, _In_ GOBJENUMPROC, _In_ LPARAM)
const char * LPCSTR
Definition: xmlstorage.h:183
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185