-#include "recyclebin.h"\r
-#include "sddl.h"\r
-\r
-/* Defines */\r
-#define RECYCLEBIN_MAGIC 0x6e694252\r
-#define DELETEDFILE_MAGIC 0x6e694253\r
-\r
-#define RECYCLE_BIN_DIRECTORY_WITH_ACL L"RECYCLER"\r
-#define RECYCLE_BIN_DIRECTORY_WITHOUT_ACL L"RECYCLED"\r
-#define RECYCLE_BIN_FILE_NAME L"INFO2"\r
-\r
-#define ROUND_UP(N, S) ((( (N) + (S) - 1) / (S) ) * (S) )\r
-\r
-/* List manipulation */\r
-#define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))\r
-#define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)\r
-#define RemoveEntryList(Entry) { PLIST_ENTRY _EX_Blink, _EX_Flink; _EX_Flink = (Entry)->Flink; _EX_Blink = (Entry)->Blink; _EX_Blink->Flink = _EX_Flink; _EX_Flink->Blink = _EX_Blink; }\r
-\r
-/* Typedefs */\r
-struct _RECYCLE_BIN;\r
-typedef struct _RECYCLE_BIN *PRECYCLE_BIN;\r
-struct _REFCOUNT_DATA;\r
-typedef struct _REFCOUNT_DATA *PREFCOUNT_DATA;\r
-\r
-typedef BOOL (*PINT_ENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HANDLE hDeletedFile);\r
-typedef BOOL (*PDESTROY_DATA) (IN PREFCOUNT_DATA pData);\r
-\r
-typedef BOOL (*PCLOSE_HANDLE) (IN HANDLE hHandle);\r
-typedef BOOL (*PDELETE_FILE) (IN PRECYCLE_BIN bin, IN LPCWSTR FullPath, IN LPCWSTR FileName);\r
-typedef BOOL (*PEMPTY_RECYCLEBIN)(IN PRECYCLE_BIN* bin);\r
-typedef BOOL (*PENUMERATE_FILES) (IN PRECYCLE_BIN bin, IN PINT_ENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context);\r
-typedef BOOL (*PGET_DETAILS) (IN PRECYCLE_BIN bin, IN HANDLE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_W FileDetails, OUT LPDWORD RequiredSize OPTIONAL);\r
-typedef BOOL (*PRESTORE_FILE) (IN PRECYCLE_BIN bin, IN HANDLE hDeletedFile);\r
-\r
-typedef struct _RECYCLEBIN_CALLBACKS\r
-{\r
- PCLOSE_HANDLE CloseHandle;\r
- PDELETE_FILE DeleteFile;\r
- PEMPTY_RECYCLEBIN EmptyRecycleBin;\r
- PENUMERATE_FILES EnumerateFiles;\r
- PGET_DETAILS GetDetails;\r
- PRESTORE_FILE RestoreFile;\r
-} RECYCLEBIN_CALLBACKS, *PRECYCLEBIN_CALLBACKS;\r
-\r
-typedef struct _REFCOUNT_DATA\r
-{\r
- DWORD ReferenceCount;\r
- PDESTROY_DATA Close;\r
-} REFCOUNT_DATA;\r
-\r
-typedef struct _RECYCLE_BIN\r
-{\r
- DWORD magic; /* RECYCLEBIN_MAGIC */\r
- LIST_ENTRY ListEntry;\r
- REFCOUNT_DATA refCount;\r
- HANDLE hInfo;\r
- RECYCLEBIN_CALLBACKS Callbacks;\r
- LPWSTR InfoFile;\r
- WCHAR Folder[ANY_SIZE]; /* [drive]:\[RECYCLE_BIN_DIRECTORY]\{SID} */\r
-} RECYCLE_BIN;\r
-\r
-typedef struct _DELETED_FILE_HANDLE\r
-{\r
- DWORD magic; /* DELETEDFILE_MAGIC */\r
- REFCOUNT_DATA refCount;\r
- PRECYCLE_BIN bin;\r
- HANDLE hDeletedFile; /* specific to recycle bin format */\r
-} DELETED_FILE_HANDLE, *PDELETED_FILE_HANDLE;\r
-\r
-/* Structures on disk */\r
-\r
-#include <pshpack1.h>\r
-\r
-typedef struct _INFO2_HEADER\r
-{\r
- DWORD dwVersion;\r
- DWORD dwNumberOfEntries;\r
- DWORD dwHighestRecordUniqueId;\r
- DWORD dwRecordSize;\r
- DWORD dwTotalLogicalSize;\r
-} INFO2_HEADER, *PINFO2_HEADER;\r
-\r
-#include <poppack.h>\r
-\r
-/* Prototypes */\r
-\r
-/* openclose.c */\r
-\r
-BOOL\r
-IntCheckDeletedFileHandle(\r
- IN HANDLE hDeletedFile);\r
-\r
-PRECYCLE_BIN\r
-IntReferenceRecycleBin(\r
- IN WCHAR driveLetter);\r
-\r
-/* recyclebin_v5.c */\r
-\r
-VOID\r
-InitializeCallbacks5(\r
- IN OUT PRECYCLEBIN_CALLBACKS Callbacks);\r
-\r
-/* refcount.c */\r
-\r
-BOOL\r
-InitializeHandle(\r
- IN PREFCOUNT_DATA pData,\r
- IN PDESTROY_DATA pFnClose OPTIONAL);\r
-\r
-BOOL\r
-ReferenceHandle(\r
- IN PREFCOUNT_DATA pData);\r
-\r
-BOOL\r
-DereferenceHandle(\r
- IN PREFCOUNT_DATA pData);\r
+#include "recyclebin.h"
+#include "sddl.h"
+#include <wine/debug.h>
+
+/* Defines */
+
+#define RECYCLE_BIN_DIRECTORY_WITH_ACL L"RECYCLER"
+#define RECYCLE_BIN_DIRECTORY_WITHOUT_ACL L"RECYCLED"
+#define RECYCLE_BIN_FILE_NAME L"INFO2"
+
+#define ROUND_UP(N, S) ((( (N) + (S) - 1) / (S) ) * (S) )
+
+/* Structures on disk */
+
+#include <pshpack1.h>
+
+typedef struct _INFO2_HEADER
+{
+ DWORD dwVersion;
+ DWORD dwNumberOfEntries; /* unused */
+ DWORD dwHighestRecordUniqueId; /* unused */
+ DWORD dwRecordSize;
+ DWORD dwTotalLogicalSize;
+} INFO2_HEADER, *PINFO2_HEADER;
+
+#include <poppack.h>
+
+/* Prototypes */
+
+/* recyclebin_generic.c */
+
+HRESULT RecycleBinGeneric_Constructor(OUT IUnknown **ppUnknown);
+
+/* recyclebin_generic_enumerator.c */
+
+HRESULT RecycleBinGenericEnum_Constructor(OUT IRecycleBinEnumList **pprbel);
+
+/* recyclebin_v5.c */
+
+HRESULT RecycleBin5_Constructor(IN LPCWSTR VolumePath, OUT IUnknown **ppUnknown);