ReactOS  0.4.15-dev-5142-g967f5b9
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 180 of file CRecyclerDropTarget.cpp.

181 {
182  return ShellObjectCreator<CRecyclerDropTarget>(riid, ppvOut);
183 }
REFIID riid
Definition: precomp.h:44

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));
982  RegCloseKey(hKey);
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  {
991  if (ret == ERROR_FILE_NOT_FOUND)
992  {
993  /* restore key and enable bitbucket */
994  dwNukeOnDelete = 0;
995  RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD));
996  }
997  RegCloseKey(hKey);
998  return TRUE;
999  }
1000  else if (dwNukeOnDelete)
1001  {
1002  /* do not delete to bitbucket */
1003  RegCloseKey(hKey);
1004  return FALSE;
1005  }
1006  /* FIXME
1007  * check if bitbucket is full
1008  */
1009  RegCloseKey(hKey);
1010  return TRUE;
1011  }
1012 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define TRUE
Definition: types.h:120
#define HKEY_CURRENT_USER
Definition: winreg.h:11
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
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:1091
#define L(x)
Definition: ntvdm.h:50
unsigned char * LPBYTE
Definition: typedefs.h:53
#define FALSE
Definition: types.h:117
BOOL WINAPI PathStripToRootW(LPWSTR lpszPath)
Definition: path.c:733
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
#define REG_CREATED_NEW_KEY
Definition: nt_native.h:1084
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define KEY_WRITE
Definition: nt_native.h:1031
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:4899
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4120
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497
int _cdecl swprintf(const WCHAR *,...)
#define DRIVE_FIXED
Definition: winbase.h:249
#define ERR(fmt,...)
Definition: debug.h:110
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
FxAutoRegKey hKey
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define NULL
Definition: types.h:112
#define HIWORD(l)
Definition: typedefs.h:247
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
#define REG_DWORD
Definition: sdbapi.c:596
#define LOWORD(l)
Definition: pedump.c:82
#define RegCloseKey(hKey)
Definition: registry.h:47
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

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 debugstr_w
Definition: kernel32.h:32
#define DeleteFileToRecycleBin
Definition: recyclebin.h:82
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by delete_files().