ReactOS 0.4.15-dev-7681-g776c3a3
CRecycleBin.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  CRecycleBin
 

Functions

BOOL TRASH_CanTrashFile (LPCWSTR wszPath)
 
BOOL TRASH_TrashFile (LPCWSTR wszPath)
 
HRESULT CRecyclerDropTarget_CreateInstance (REFIID riid, LPVOID *ppvOut)
 

Function Documentation

◆ CRecyclerDropTarget_CreateInstance()

HRESULT CRecyclerDropTarget_CreateInstance ( REFIID  riid,
LPVOID ppvOut 
)

Definition at line 182 of file CRecyclerDropTarget.cpp.

183{
184 return ShellObjectCreator<CRecyclerDropTarget>(riid, ppvOut);
185}
REFIID riid
Definition: atlbase.h:39

Referenced by CRecycleBin::CreateViewObject(), and CDefaultContextMenu::DoDelete().

◆ TRASH_CanTrashFile()

BOOL TRASH_CanTrashFile ( LPCWSTR  wszPath)

Tests whether a file can be trashed

Parameters
wszPathPath to the file to be trash
Returns
TRUE if the file can be trashed, FALSE otherwise

Definition at line 932 of file CRecycleBin.cpp.

933{
934 LONG ret;
935 DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength;
936 DWORD FileSystemFlags, dwSize, dwDisposition;
937 HKEY hKey;
938 WCHAR szBuffer[10];
939 WCHAR szKey[150] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\";
940
941 if (wszPath[1] != L':')
942 {
943 /* path is UNC */
944 return FALSE;
945 }
946
947 // Copy and retrieve the root path from get given string
948 WCHAR wszRootPathName[MAX_PATH];
949 StringCbCopyW(wszRootPathName, sizeof(wszRootPathName), wszPath);
950 PathStripToRootW(wszRootPathName);
951
952 // Test to see if the drive is fixed (non removable)
953 if (GetDriveTypeW(wszRootPathName) != DRIVE_FIXED)
954 {
955 /* no bitbucket on removable media */
956 return FALSE;
957 }
958
959 if (!GetVolumeInformationW(wszRootPathName, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0))
960 {
961 ERR("GetVolumeInformationW failed with %u wszRootPathName=%s\n", GetLastError(), debugstr_w(wszRootPathName));
962 return FALSE;
963 }
964
965 swprintf(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber));
966 wcscat(szKey, szBuffer);
967
968 if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS)
969 {
970 ERR("RegCreateKeyExW failed\n");
971 return FALSE;
972 }
973
974 if (dwDisposition & REG_CREATED_NEW_KEY)
975 {
976 /* per default move to bitbucket */
977 dwNukeOnDelete = 0;
978 RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD));
979 /* per default unlimited size */
980 dwSize = -1;
981 RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD));
983 return TRUE;
984 }
985 else
986 {
987 dwSize = sizeof(dwNukeOnDelete);
988 ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize);
989 if (ret != ERROR_SUCCESS)
990 {
992 {
993 /* restore key and enable bitbucket */
994 dwNukeOnDelete = 0;
995 RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD));
996 }
998 return TRUE;
999 }
1000 else if (dwNukeOnDelete)
1001 {
1002 /* do not delete to bitbucket */
1004 return FALSE;
1005 }
1006 /* FIXME
1007 * check if bitbucket is full
1008 */
1010 return TRUE;
1011 }
1012}
#define ERR(fmt,...)
Definition: debug.h:110
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4911
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4132
#define MAX_PATH
Definition: compat.h:34
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497
BOOL WINAPI GetVolumeInformationW(IN LPCWSTR lpRootPathName, IN LPWSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPWSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
Definition: volume.c:226
BOOL WINAPI PathStripToRootW(LPWSTR lpszPath)
Definition: path.c:733
#define swprintf
Definition: precomp.h:40
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
#define debugstr_w
Definition: kernel32.h:32
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define REG_CREATED_NEW_KEY
Definition: nt_native.h:1084
#define KEY_WRITE
Definition: nt_native.h:1031
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
long LONG
Definition: pedump.c:60
#define REG_DWORD
Definition: sdbapi.c:596
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HIWORD(l)
Definition: typedefs.h:247
int ret
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define DRIVE_FIXED
Definition: winbase.h:252
#define HKEY_CURRENT_USER
Definition: winreg.h:11
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by delete_files().

◆ TRASH_TrashFile()

BOOL TRASH_TrashFile ( LPCWSTR  wszPath)

Definition at line 1015 of file CRecycleBin.cpp.

1016{
1017 TRACE("(%s)\n", debugstr_w(wszPath));
1018 return DeleteFileToRecycleBin(wszPath);
1019}
#define DeleteFileToRecycleBin
Definition: recyclebin.h:82
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by delete_files().