ReactOS  0.4.15-dev-4920-g5fa8403
recyclebin.h
Go to the documentation of this file.
1 #pragma once
2 
3 #ifdef __cplusplus
4 extern "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 ANY_SIZE 1
21 
22 /* Structures used by the API Interface */
23 
25 {
34 {
42 #ifdef UNICODE
43 #define DELETED_FILE_DETAILS DELETED_FILE_DETAILS_W
44 #define PDELETED_FILE_DETAILS PDELETED_FILE_DETAILS_W
45 #else
46 #define DELETED_FILE_DETAILS DELETED_FILE_DETAILS_A
47 #define PDELETED_FILE_DETAILS PDELETED_FILE_DETAILS_A
48 #endif
49 
50 /* API Interface */
51 
52 /* Function called for each deleted file in the recycle bin
53  * Context: value given by the caller of the EnumerateRecycleBin function
54  * hDeletedFile: a handle to the deleted file
55  * Returning FALSE stops the enumeration.
56  * Remarks: the handle must be closed with the CloseRecycleBinHandle function
57  */
59 
60 /* Closes a file deleted handle.
61  * hDeletedFile: the handle to close
62  * Returns TRUE if operation succeeded, FALSE otherwise.
63  * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback
64  */
67  IN HANDLE hDeletedFile);
68 
69 /* Moves a file to the recycle bin.
70  * FileName: the name of the file to move the recycle bin
71  * Returns TRUE if operation succeeded, FALSE otherwise.
72  */
79 #ifdef UNICODE
80 #define DeleteFileToRecycleBin DeleteFileToRecycleBinW
81 #else
82 #define DeleteFileToRecycleBin DeleteFileToRecycleBinA
83 #endif
84 
85 /* Moves a file to the recycle bin.
86  * hDeletedFile: handle of the deleted file to delete
87  * Returns TRUE if operation succeeded, FALSE otherwise.
88  * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback
89  */
92  IN HANDLE hDeletedFile);
93 
94 /* Removes all elements contained in a recycle bin
95  * pszRoot: the name of the drive containing the recycle bin
96  * Returns TRUE if operation succeeded, FALSE otherwise.
97  * Remarks: 'pszRoot' can be NULL to mean 'all recycle bins'.
98  */
101  IN LPCSTR pszRoot OPTIONAL);
102 BOOL WINAPI
104  IN LPCWSTR pszRoot OPTIONAL);
105 #ifdef UNICODE
106 #define EmptyRecycleBin EmptyRecycleBinW
107 #else
108 #define EmptyRecycleBin EmptyRecycleBinA
109 #endif
110 
111 /* Enumerate contents of a recycle bin.
112  * pszRoot: the name of the drive containing the recycle bin
113  * pFnCallback: callback function to be called for each deleted item found
114  * Context: some value which will be given back in the callback function
115  * Returns TRUE if operation succeeded, FALSE otherwise.
116  * Remarks: 'pszRoot' can be NULL to mean 'all recycle bins'.
117  */
118 BOOL WINAPI
120  IN LPCSTR pszRoot OPTIONAL,
123 BOOL WINAPI
125  IN LPCWSTR pszRoot OPTIONAL,
128 #ifdef UNICODE
129 #define EnumerateRecycleBin EnumerateRecycleBinW
130 #else
131 #define EnumerateRecycleBin EnumerateRecycleBinA
132 #endif
133 
134 BOOL WINAPI
136  IN HANDLE hDeletedFile,
137  OUT LPWSTR pTypeName,
140 
141 /* Gets details about a deleted file
142  * hDeletedFile: handle of the deleted file to get details about
143  * BufferSize: size of the 'FileDetails' buffer, in bytes
144  * FileDetails: if the function succeeded, contains details about the deleted file
145  * RequiredSize: contains the minimal buffer size required to get file information details
146  * Returns TRUE if operation succeeded, FALSE otherwise.
147  * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback
148  */
149 BOOL WINAPI
151  IN HANDLE hDeletedFile,
155 BOOL WINAPI
157  IN HANDLE hDeletedFile,
161 #ifdef UNICODE
162 #define GetDeletedFileDetails GetDeletedFileDetailsW
163 #else
164 #define GetDeletedFileDetails GetDeletedFileDetailsA
165 #endif
166 
167 /* Get details about a whole recycle bin
168  * pszVolume:
169  * pulTotalItems:
170  * pulTotalSize
171  */
172 BOOL WINAPI
174  IN LPCWSTR pszVolume OPTIONAL,
175  OUT ULARGE_INTEGER *pulTotalItems,
176  OUT ULARGE_INTEGER *pulTotalSize);
177 
178 /* Restores a deleted file
179  * hDeletedFile: handle of the deleted file to restore
180  * Returns TRUE if operation succeeded, FALSE otherwise.
181  * Remarks: if the function succeeds, the handle is not valid anymore.
182  */
183 BOOL WINAPI
185  IN HANDLE hDeletedFile);
186 
187 /* COM interface */
188 
189 #define INTERFACE IRecycleBinFile
190 DECLARE_INTERFACE_(IRecycleBinFile, IUnknown)
191 {
193 
194  /* IUnknown methods */
198 
199  /* IRecycleBinFile methods */
200  STDMETHOD(GetLastModificationTime)(THIS_ FILETIME *pLastModificationTime) PURE;
201  STDMETHOD(GetDeletionTime)(THIS_ FILETIME *pDeletionTime) PURE;
204  STDMETHOD(GetAttributes)(THIS_ DWORD *pAttributes) PURE;
208  STDMETHOD(Restore)(THIS) PURE;
209 
211 };
212 #undef INTERFACE
213 
214 #define INTERFACE IRecycleBinEnumList
215 DECLARE_INTERFACE_(IRecycleBinEnumList, IUnknown)
216 {
218 
219  /* IUnknown methods */
223 
224  /* IRecycleBinEnumList methods */
225  STDMETHOD(Next)(THIS_ DWORD celt, IRecycleBinFile **rgelt, DWORD *pceltFetched);
226  STDMETHOD(Skip)(THIS_ DWORD celt) PURE;
227  STDMETHOD(Reset)(THIS) PURE;
228 
230 };
231 #undef INTERFACE
232 
233 #define INTERFACE IRecycleBin
235 {
237 
238  /* IUnknown methods */
242 
243  /* IRecycleBin methods */
244  STDMETHOD(DeleteFile)(THIS_ LPCWSTR szFileName);
246  STDMETHOD(EnumObjects)(THIS_ IRecycleBinEnumList **ppEnumList);
247 
249 };
250 #undef INTERFACE
251 
255 
256 #if (!defined(__cplusplus) || defined(CINTERFACE)) && defined(COBJMACROS)
257 #define IRecycleBinFile_QueryInterface(This, riid, ppvObject) \
258  (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
259 #define IRecycleBinFile_AddRef(This) \
260  (This)->lpVtbl->AddRef(This)
261 #define IRecycleBinFile_Release(This) \
262  (This)->lpVtbl->Release(This)
263 #define IRecycleBinFile_GetLastModificationTime(This, pLastModificationTime) \
264  (This)->lpVtbl->GetLastModificationTime(This, pLastModificationTime)
265 #define IRecycleBinFile_GetDeletionTime(This, pDeletionTime) \
266  (This)->lpVtbl->GetDeletionTime(This, pDeletionTime)
267 #define IRecycleBinFile_GetFileSize(This, pFileSize) \
268  (This)->lpVtbl->GetFileSize(This, pFileSize)
269 #define IRecycleBinFile_GetPhysicalFileSize(This, pPhysicalFileSize) \
270  (This)->lpVtbl->GetPhysicalFileSize(This, pPhysicalFileSize)
271 #define IRecycleBinFile_GetAttributes(This, pAttributes) \
272  (This)->lpVtbl->GetAttributes(This, pAttributes)
273 #define IRecycleBinFile_GetFileName(This, BufferSize, Buffer, RequiredSize) \
274  (This)->lpVtbl->GetFileName(This, BufferSize, Buffer, RequiredSize)
275 #define IRecycleBinFile_GetTypeName(This, BufferSize, Buffer, RequiredSize) \
276  (This)->lpVtbl->GetTypeName(This, BufferSize, Buffer, RequiredSize)
277 #define IRecycleBinFile_Delete(This) \
278  (This)->lpVtbl->Delete(This)
279 #define IRecycleBinFile_Restore(This) \
280  (This)->lpVtbl->Restore(This)
281 
282 #define IRecycleBinEnumList_QueryInterface(This, riid, ppvObject) \
283  (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
284 #define IRecycleBinEnumList_AddRef(This) \
285  (This)->lpVtbl->AddRef(This)
286 #define IRecycleBinEnumList_Release(This) \
287  (This)->lpVtbl->Release(This)
288 #define IRecycleBinEnumList_Next(This, celt, rgelt, pceltFetched) \
289  (This)->lpVtbl->Next(This, celt, rgelt, pceltFetched)
290 #define IRecycleBinEnumList_Skip(This, celt) \
291  (This)->lpVtbl->Skip(This, celt)
292 #define IRecycleBinEnumList_Reset(This) \
293  (This)->lpVtbl->Reset(This)
294 
295 #define IRecycleBin_QueryInterface(This, riid, ppvObject) \
296  (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
297 #define IRecycleBin_AddRef(This) \
298  (This)->lpVtbl->AddRef(This)
299 #define IRecycleBin_Release(This) \
300  (This)->lpVtbl->Release(This)
301 #define IRecycleBin_DeleteFile(This, szFileName) \
302  (This)->lpVtbl->DeleteFile(This, szFileName)
303 #define IRecycleBin_EmptyRecycleBin(This) \
304  (This)->lpVtbl->EmptyRecycleBin(This)
305 #define IRecycleBin_EnumObjects(This, ppEnumList) \
306  (This)->lpVtbl->EnumObjects(This, ppEnumList)
307 #endif
308 
311  IN LPCWSTR pszVolume OPTIONAL,
312  OUT IRecycleBin **pprb);
313 
314 #ifdef __cplusplus
315 }
316 #endif
#define IN
Definition: typedefs.h:39
EXTERN_C const IID IID_IRecycleBin
Definition: recyclebin.h:254
#define REFIID
Definition: guiddef.h:118
#define THIS_
Definition: basetyps.h:65
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
static PWCHAR GetFileName(PWCHAR Path)
Definition: cabinet.c:381
#define BEGIN_INTERFACE
Definition: objbase.h:231
#define THIS
Definition: basetyps.h:66
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
REFIID riid
Definition: precomp.h:44
EXTERN_C const IID IID_IRecycleBinEnumList
Definition: recyclebin.h:253
char CHAR
Definition: xmlstorage.h:175
static HRESULT QueryInterface(REFIID, void **)
Definition: events.c:2587
ULARGE_INTEGER PhysicalFileSize
Definition: recyclebin.h:38
EXTERN_C const IID IID_IRecycleBinFile
Definition: recyclebin.h:249
BOOL WINAPI RestoreFile(IN HANDLE hDeletedFile)
Definition: recyclebin.c:392
#define DeleteFile
Definition: winbase.h:3625
#define BOOL
Definition: nt_native.h:43
struct _DELETED_FILE_DETAILS_A * PDELETED_FILE_DETAILS_A
int WINAPI EnumObjects(_In_ HDC, _In_ int, _In_ GOBJENUMPROC, _In_ LPARAM)
#define STDMETHOD(m)
Definition: basetyps.h:62
struct _DELETED_FILE_DETAILS_A DELETED_FILE_DETAILS_A
BOOL(WINAPI * PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HANDLE hDeletedFile)
Definition: recyclebin.h:58
BOOL WINAPI EnumerateRecycleBinA(IN LPCSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
Definition: recyclebin.c:171
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL WINAPI EmptyRecycleBinA(IN LPCSTR pszRoot OPTIONAL)
Definition: recyclebin.c:113
BOOL WINAPI GetDeletedFileDetailsW(IN HANDLE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL, OUT LPDWORD RequiredSize OPTIONAL)
Definition: recyclebin.c:327
ULARGE_INTEGER PhysicalFileSize
Definition: recyclebin.h:29
DECLARE_INTERFACE_(IRecycleBinFile, IUnknown)
Definition: recyclebin.h:190
#define END_INTERFACE
Definition: objbase.h:232
const char * LPCSTR
Definition: xmlstorage.h:183
struct _DELETED_FILE_DETAILS_W DELETED_FILE_DETAILS_W
BOOL WINAPI GetDeletedFileDetailsA(IN HANDLE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_A FileDetails OPTIONAL, OUT LPDWORD RequiredSize OPTIONAL)
Definition: recyclebin.c:282
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define EmptyRecycleBin
Definition: recyclebin.h:108
#define WINAPI
Definition: msvc.h:6
unsigned long DWORD
Definition: ntddk_ex.h:95
HRESULT WINAPI GetDefaultRecycleBin(IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb)
Definition: recyclebin.c:411
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
BOOL WINAPI GetDeletedFileTypeNameW(IN HANDLE hDeletedFile, OUT LPWSTR pTypeName, IN DWORD BufferSize, OUT LPDWORD RequiredSize OPTIONAL)
Definition: recyclebin.c:256
BOOL GetPhysicalFileSize(LPCWSTR PathBuffer, PULARGE_INTEGER Size)
Definition: filedefext.cpp:32
ULARGE_INTEGER FileSize
Definition: recyclebin.h:37
ULARGE_INTEGER FileSize
Definition: recyclebin.h:28
REFIID LPVOID * ppvObject
Definition: precomp.h:44
BOOL WINAPI CloseRecycleBinHandle(IN HANDLE hDeletedFile)
Definition: recyclebin.c:12
BOOL WINAPI DeleteFileToRecycleBinW(IN LPCWSTR FileName)
Definition: recyclebin.c:67
ULONG_PTR SIZE_T
Definition: typedefs.h:80
_In_ BOOLEAN Release
Definition: cdrom.h:920
BOOL WINAPI DeleteFileHandleToRecycleBin(IN HANDLE hDeletedFile)
Definition: recyclebin.c:93
struct _DELETED_FILE_DETAILS_W * PDELETED_FILE_DETAILS_W
#define PURE
Definition: basetyps.h:64
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
BOOL WINAPI EnumerateRecycleBinW(IN LPCWSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
Definition: recyclebin.c:205
#define ANY_SIZE
Definition: recyclebin.h:20
BOOL WINAPI EmptyRecycleBinW(IN LPCWSTR pszRoot OPTIONAL)
Definition: recyclebin.c:145
struct tagContext Context
Definition: acpixf.h:1034
#define OUT
Definition: typedefs.h:40
uint32_t * LPDWORD
Definition: typedefs.h:59
TCHAR * GetTypeName(HANDLE handle)
Definition: handlelist.c:127
unsigned int ULONG
Definition: retypes.h:1
BOOL WINAPI DeleteFileToRecycleBinA(IN LPCSTR FileName)
Definition: recyclebin.c:31
BOOL WINAPI GetRecycleBinDetails(IN LPCWSTR pszVolume OPTIONAL, OUT ULARGE_INTEGER *pulTotalItems, OUT ULARGE_INTEGER *pulTotalSize)
Definition: recyclebin.c:380
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
Definition: wdfdevice.h:4431
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
#define EXTERN_C
Definition: basetyps.h:12
BOOL Delete(LPCTSTR ServiceName)
Definition: delete.c:12
#define BufferSize
Definition: mmc.h:75
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:251
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68