ReactOS 0.4.15-dev-5895-g2687c1b
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 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);
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 */
120 IN LPCSTR pszRoot OPTIONAL,
125 IN LPCWSTR pszRoot OPTIONAL,
128#ifdef UNICODE
129#define EnumerateRecycleBin EnumerateRecycleBinW
130#else
131#define EnumerateRecycleBin EnumerateRecycleBinA
132#endif
133
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 */
151 IN HANDLE hDeletedFile,
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 */
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 */
185 IN HANDLE hDeletedFile);
186
187/* COM interface */
188
189#define INTERFACE IRecycleBinFile
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
215DECLARE_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
BOOL Delete(LPCTSTR ServiceName)
Definition: delete.c:12
#define DECLARE_INTERFACE_(i, b)
Definition: basetyps.h:78
#define THIS_
Definition: basetyps.h:65
#define EXTERN_C
Definition: basetyps.h:12
#define THIS
Definition: basetyps.h:66
#define PURE
Definition: basetyps.h:64
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
#define STDMETHOD(m)
Definition: basetyps.h:62
static PWCHAR GetFileName(PWCHAR Path)
Definition: cabinet.c:381
_In_ BOOLEAN Release
Definition: cdrom.h:920
Definition: bufpool.h:45
#define BufferSize
Definition: mmc.h:75
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
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
TCHAR * GetTypeName(HANDLE handle)
Definition: handlelist.c:127
REFIID riid
Definition: atlbase.h:39
static HRESULT QueryInterface(REFIID, void **)
Definition: events.c:2587
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
#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:254
BOOL WINAPI EnumerateRecycleBinW(IN LPCWSTR pszRoot OPTIONAL, IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL)
Definition: recyclebin.c:205
BOOL WINAPI DeleteFileHandleToRecycleBin(IN HANDLE hDeletedFile)
Definition: recyclebin.c:93
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 WINAPI DeleteFileToRecycleBinW(IN LPCWSTR FileName)
Definition: recyclebin.c:67
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
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
struct _DELETED_FILE_DETAILS_A * PDELETED_FILE_DETAILS_A
BOOL WINAPI CloseRecycleBinHandle(IN HANDLE hDeletedFile)
Definition: recyclebin.c:12
struct _DELETED_FILE_DETAILS_W * PDELETED_FILE_DETAILS_W
BOOL(WINAPI * PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HANDLE hDeletedFile)
Definition: recyclebin.h:58
struct _DELETED_FILE_DETAILS_A DELETED_FILE_DETAILS_A
BOOL WINAPI GetDeletedFileTypeNameW(IN HANDLE hDeletedFile, OUT LPWSTR pTypeName, IN DWORD BufferSize, OUT LPDWORD RequiredSize OPTIONAL)
Definition: recyclebin.c:256
#define ANY_SIZE
Definition: recyclebin.h:20
BOOL WINAPI EmptyRecycleBinA(IN LPCSTR pszRoot OPTIONAL)
Definition: recyclebin.c:113
BOOL WINAPI EmptyRecycleBinW(IN LPCWSTR pszRoot OPTIONAL)
Definition: recyclebin.c:145
EXTERN_C const IID IID_IRecycleBinFile
Definition: recyclebin.h:252
HRESULT WINAPI GetDefaultRecycleBin(IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb)
Definition: recyclebin.c:411
BOOL WINAPI GetRecycleBinDetails(IN LPCWSTR pszVolume OPTIONAL, OUT ULARGE_INTEGER *pulTotalItems, OUT ULARGE_INTEGER *pulTotalSize)
Definition: recyclebin.c:380
BOOL WINAPI RestoreFile(IN HANDLE hDeletedFile)
Definition: recyclebin.c:392
struct _DELETED_FILE_DETAILS_W DELETED_FILE_DETAILS_W
EXTERN_C const IID IID_IRecycleBinEnumList
Definition: recyclebin.h:253
#define EmptyRecycleBin
Definition: recyclebin.h:108
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
ULARGE_INTEGER FileSize
Definition: recyclebin.h:28
ULARGE_INTEGER PhysicalFileSize
Definition: recyclebin.h:29
ULARGE_INTEGER FileSize
Definition: recyclebin.h:37
ULARGE_INTEGER PhysicalFileSize
Definition: recyclebin.h:38
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t * LPDWORD
Definition: typedefs.h:59
#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
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254
#define DeleteFile
Definition: winbase.h:3635
_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_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
char CHAR
Definition: xmlstorage.h:175