-/* Recycle bin management\r
- * This file is under the GPLv2 licence\r
- * Copyright (C) 2006 Hervé Poussineau <hpoussin@reactos.org>\r
- */\r
-\r
-#include "recyclebin_private.h"\r
-\r
-#include <pshpack1.h>\r
-\r
-/* MS Windows 2000/XP/2003 */\r
-typedef struct _DELETED_FILE_RECORD\r
-{\r
- CHAR FileNameA[MAX_PATH];\r
- DWORD dwRecordUniqueId;\r
- DWORD dwDriveNumber;\r
- FILETIME DeletionTime;\r
- DWORD dwPhysicalFileSize;\r
- WCHAR FileNameW[MAX_PATH];\r
-} DELETED_FILE_RECORD, *PDELETED_FILE_RECORD;\r
-\r
-#include <poppack.h>\r
-\r
-static BOOL\r
-CloseHandle5(\r
- IN HANDLE hDeletedFile);\r
-\r
-static BOOL\r
-DeleteFile5(\r
- IN PRECYCLE_BIN Context,\r
- IN LPCWSTR FullPath,\r
- IN LPCWSTR FileName);\r
-\r
-static BOOL\r
-EmptyRecycleBin5(\r
- IN PRECYCLE_BIN* bin);\r
-\r
-static BOOL\r
-EnumerateFiles5(\r
- IN PRECYCLE_BIN bin,\r
- IN PINT_ENUMERATE_RECYCLEBIN_CALLBACK pFnCallback,\r
- IN PVOID Context);\r
-\r
-static BOOL\r
-GetDetails5(\r
- IN PRECYCLE_BIN bin,\r
- IN HANDLE hDeletedFile,\r
- IN DWORD BufferSize,\r
- IN OUT PDELETED_FILE_DETAILS_W FileDetails,\r
- OUT LPDWORD RequiredSize OPTIONAL);\r
-\r
-static BOOL\r
-RestoreFile5(\r
- IN PRECYCLE_BIN Context,\r
- IN HANDLE hDeletedFile);\r
-\r
-static BOOL\r
-IntDeleteRecursive(\r
- IN LPCWSTR FullName);\r
-\r
-static BOOL\r
-IntEmptyRecycleBinCallback(\r
- IN PVOID Context,\r
- IN HANDLE hDeletedFile);\r
-\r
-static BOOL\r
-IntGetFullName(\r
- IN PRECYCLE_BIN bin,\r
- IN PDELETED_FILE_RECORD pDeletedFile,\r
- OUT LPWSTR* pFullName);\r
-\r
-static BOOL\r
-IntSearchRecord(\r
- IN PRECYCLE_BIN bin,\r
- IN HANDLE hDeletedFile,\r
- OUT PDELETED_FILE_RECORD DeletedFile,\r
- OUT PLARGE_INTEGER Position OPTIONAL);\r
+/* Recycle bin management
+ * This file is under the GPLv2 licence
+ * Copyright (C) 2006 Hervé Poussineau <hpoussin@reactos.org>
+ */
+
+#include "recyclebin_private.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <pshpack1.h>
+
+/* MS Windows 2000/XP/2003 */
+typedef struct _DELETED_FILE_RECORD
+{
+ CHAR FileNameA[MAX_PATH];
+ DWORD dwRecordUniqueId;
+ DWORD dwDriveNumber;
+ FILETIME DeletionTime;
+ DWORD dwPhysicalFileSize;
+ WCHAR FileNameW[MAX_PATH];
+} DELETED_FILE_RECORD, *PDELETED_FILE_RECORD;
+
+#include <poppack.h>
+
+/* COM interface */
+
+typedef interface IRecycleBin5 IRecycleBin5;
+EXTERN_C const IID IID_IRecycleBin5;
+
+typedef struct IRecycleBin5Vtbl
+{
+ /* IRecycleBin interface */
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IN IRecycleBin5 *This,
+ IN REFIID riid,
+ OUT void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IN IRecycleBin5 *This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IN IRecycleBin5 *This);
+
+ HRESULT (STDMETHODCALLTYPE *DeleteFile)(
+ IN IRecycleBin5 *This,
+ IN LPCWSTR szFileName);
+
+ HRESULT (STDMETHODCALLTYPE *EmptyRecycleBin)(
+ IN IRecycleBin5 *This);
+
+ HRESULT (STDMETHODCALLTYPE *EnumObjects)(
+ IN IRecycleBin5 *This,
+ OUT IRecycleBinEnumList **ppEnumList);
+
+ /* IRecycleBin5 interface */
+ HRESULT (STDMETHODCALLTYPE *Delete)(
+ IN IRecycleBin5 *This,
+ IN LPCWSTR pDeletedFileName,
+ IN DELETED_FILE_RECORD *pDeletedFile);
+
+ HRESULT (STDMETHODCALLTYPE *Restore)(
+ IN IRecycleBin5 *This,
+ IN LPCWSTR pDeletedFileName,
+ IN DELETED_FILE_RECORD *pDeletedFile);
+
+ HRESULT (STDMETHODCALLTYPE *OnClosing)(
+ IN IRecycleBin5 *This,
+ IN IRecycleBinEnumList *prbel);
+} IRecycleBin5Vtbl;
+
+interface IRecycleBin5
+{
+ CONST_VTBL struct IRecycleBin5Vtbl *lpVtbl;
+};
+
+#ifdef COBJMACROS
+#define IRecycleBin5_QueryInterface(This, riid, ppvObject) \
+ (This)->lpVtbl->QueryInterface(This, riid, ppvObject)
+#define IRecycleBin5_AddRef(This) \
+ (This)->lpVtbl->AddRef(This)
+#define IRecycleBin5_Release(This) \
+ (This)->lpVtbl->Release(This)
+#define IRecycleBin5_DeleteFile(This, szFileName) \
+ (This)->lpVtbl->DeleteFile(This, szFileName)
+#define IRecycleBin5_EmptyRecycleBin(This) \
+ (This)->lpVtbl->EmptyRecycleBin(This)
+#define IRecycleBin5_EnumObjects(This, ppEnumList) \
+ (This)->lpVtbl->EnumObjects(This, ppEnumList)
+#define IRecycleBin5_Delete(This, pDeletedFileName, pDeletedFile) \
+ (This)->lpVtbl->Delete(This, pDeletedFileName, pDeletedFile)
+#define IRecycleBin5_Restore(This, pDeletedFileName, pDeletedFile) \
+ (This)->lpVtbl->Restore(This, pDeletedFileName, pDeletedFile)
+#define IRecycleBin5_OnClosing(This, prb5el) \
+ (This)->lpVtbl->OnClosing(This, prb5el)
+#endif
+
+HRESULT
+RecycleBin5Enum_Constructor(
+ IN IRecycleBin5 *prb,
+ IN HANDLE hInfo,
+ IN HANDLE hInfoMapped,
+ IN LPCWSTR szPrefix,
+ OUT IUnknown **ppUnknown);
+
+#ifdef __cplusplus
+}
+#endif