Drop has_recycle_dot_bin
This commit is contained in:
		| @@ -223,12 +223,6 @@ static char desktop_ini[] = | |||||||
| static char desktop_ini_ext[] = | static char desktop_ini_ext[] = | ||||||
|   "LocalizedResourceName=@%SystemRoot%\\system32\\shell32.dll,-8964\r\n"; |   "LocalizedResourceName=@%SystemRoot%\\system32\\shell32.dll,-8964\r\n"; | ||||||
|  |  | ||||||
| static BYTE info2[] = |  | ||||||
| { |  | ||||||
|   0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |  | ||||||
|   0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| enum bin_status | enum bin_status | ||||||
| { | { | ||||||
|   dont_move, |   dont_move, | ||||||
| @@ -303,14 +297,7 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access, ULONG flags) | |||||||
|   RtlInitEmptyUnicodeString (&recycler, recyclerbuf, sizeof recyclerbuf); |   RtlInitEmptyUnicodeString (&recycler, recyclerbuf, sizeof recyclerbuf); | ||||||
|   if (!pc.isremote ()) |   if (!pc.isremote ()) | ||||||
|     { |     { | ||||||
|       if (wincap.has_recycle_dot_bin ()) /* NTFS and FAT since Vista, ReFS */ |       RtlAppendUnicodeToString (&recycler, L"\\$Recycle.Bin\\"); | ||||||
| 	RtlAppendUnicodeToString (&recycler, L"\\$Recycle.Bin\\"); |  | ||||||
|       else if (pc.fs_is_ntfs ())	/* NTFS up to 2K3 */ |  | ||||||
| 	RtlAppendUnicodeToString (&recycler, L"\\RECYCLER\\"); |  | ||||||
|       else if (pc.fs_is_fat ())	/* FAT up to 2K3 */ |  | ||||||
| 	RtlAppendUnicodeToString (&recycler, L"\\Recycled\\"); |  | ||||||
|       else |  | ||||||
| 	goto out; |  | ||||||
|       RtlInitCountedUnicodeString(&fname, pfni->FileName, pfni->FileNameLength); |       RtlInitCountedUnicodeString(&fname, pfni->FileName, pfni->FileNameLength); | ||||||
|       /* Is the file a subdir of the recycler? */ |       /* Is the file a subdir of the recycler? */ | ||||||
|       if (RtlEqualUnicodePathPrefix (&fname, &recycler, TRUE)) |       if (RtlEqualUnicodePathPrefix (&fname, &recycler, TRUE)) | ||||||
| @@ -431,13 +418,9 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access, ULONG flags) | |||||||
| 	} | 	} | ||||||
|       /* Then check if recycler exists by opening and potentially creating it. |       /* Then check if recycler exists by opening and potentially creating it. | ||||||
| 	 Yes, we can really do that.  Typically the recycle bin is created | 	 Yes, we can really do that.  Typically the recycle bin is created | ||||||
| 	 by the first user actually using the bin.  Pre-Vista, the permissions | 	 by the first user actually using the bin. */ | ||||||
| 	 are the default permissions propagated from the root directory. |  | ||||||
| 	 Since Vista the top-level recycle dir has explicit permissions. */ |  | ||||||
|       InitializeObjectAttributes (&attr, &recycler, OBJ_CASE_INSENSITIVE, |       InitializeObjectAttributes (&attr, &recycler, OBJ_CASE_INSENSITIVE, | ||||||
| 				  rootdir, | 				  rootdir, recycler_sd (true, true)); | ||||||
| 				  wincap.has_recycle_dot_bin () |  | ||||||
| 				  ? recycler_sd (true, true) : NULL); |  | ||||||
|       recycler.Length = recycler_base_len; |       recycler.Length = recycler_base_len; | ||||||
|       status = NtCreateFile (&recyclerdir, |       status = NtCreateFile (&recyclerdir, | ||||||
| 			     READ_CONTROL | 			     READ_CONTROL | ||||||
| @@ -475,9 +458,8 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access, ULONG flags) | |||||||
| 	      goto out; | 	      goto out; | ||||||
| 	    } | 	    } | ||||||
| 	} | 	} | ||||||
|       /* The desktop.ini and INFO2 (pre-Vista) files are expected by |       /* The desktop.ini file is expected by Windows Explorer.  Otherwise, | ||||||
| 	 Windows Explorer.  Otherwise, the created bin is treated as |          the created bin is treated as corrupted */ | ||||||
| 	 corrupted */ |  | ||||||
|       if (io.Information == FILE_CREATED) |       if (io.Information == FILE_CREATED) | ||||||
| 	{ | 	{ | ||||||
| 	  RtlInitUnicodeString (&fname, L"desktop.ini"); | 	  RtlInitUnicodeString (&fname, L"desktop.ini"); | ||||||
| @@ -495,42 +477,15 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access, ULONG flags) | |||||||
| 	    { | 	    { | ||||||
| 	      status = NtWriteFile (tmp_fh, NULL, NULL, NULL, &io, desktop_ini, | 	      status = NtWriteFile (tmp_fh, NULL, NULL, NULL, &io, desktop_ini, | ||||||
| 				    sizeof desktop_ini - 1, NULL, NULL); | 				    sizeof desktop_ini - 1, NULL, NULL); | ||||||
|  | 	      if (NT_SUCCESS (status)) | ||||||
|  | 		status = NtWriteFile (tmp_fh, NULL, NULL, NULL, &io, | ||||||
|  | 				      desktop_ini_ext, | ||||||
|  | 				      sizeof desktop_ini_ext - 1, NULL, NULL); | ||||||
| 	      if (!NT_SUCCESS (status)) | 	      if (!NT_SUCCESS (status)) | ||||||
| 		debug_printf ("NtWriteFile (%S) failed, status = %y", | 		debug_printf ("NtWriteFile (%S) failed, status = %y", | ||||||
| 			      &fname, status); | 			      &fname, status); | ||||||
| 	      else if (wincap.has_recycle_dot_bin ()) |  | ||||||
| 	      	{ |  | ||||||
| 		  status = NtWriteFile (tmp_fh, NULL, NULL, NULL, &io, |  | ||||||
| 		  			desktop_ini_ext, |  | ||||||
| 					sizeof desktop_ini_ext - 1, NULL, NULL); |  | ||||||
| 		  if (!NT_SUCCESS (status)) |  | ||||||
| 		    debug_printf ("NtWriteFile (%S) failed, status = %y", |  | ||||||
| 				  &fname, status); |  | ||||||
| 		} |  | ||||||
| 	      NtClose (tmp_fh); | 	      NtClose (tmp_fh); | ||||||
| 	    } | 	    } | ||||||
| 	  if (!wincap.has_recycle_dot_bin ()) /* No INFO2 file since Vista */ |  | ||||||
| 	    { |  | ||||||
| 	      RtlInitUnicodeString (&fname, L"INFO2"); |  | ||||||
| 	      status = NtCreateFile (&tmp_fh, FILE_GENERIC_WRITE, &attr, &io, |  | ||||||
| 				     NULL, FILE_ATTRIBUTE_ARCHIVE |  | ||||||
| 					   | FILE_ATTRIBUTE_HIDDEN, |  | ||||||
| 				     FILE_SHARE_VALID_FLAGS, FILE_CREATE, |  | ||||||
| 				     FILE_SYNCHRONOUS_IO_NONALERT |  | ||||||
| 				     | FILE_NON_DIRECTORY_FILE, NULL, 0); |  | ||||||
| 		if (!NT_SUCCESS (status)) |  | ||||||
| 		  debug_printf ("NtCreateFile (%S) failed, status = %y", |  | ||||||
| 				&recycler, status); |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 		  status = NtWriteFile (tmp_fh, NULL, NULL, NULL, &io, info2, |  | ||||||
| 					sizeof info2, NULL, NULL); |  | ||||||
| 		  if (!NT_SUCCESS (status)) |  | ||||||
| 		    debug_printf ("NtWriteFile (%S) failed, status = %y", |  | ||||||
| 				  &fname, status); |  | ||||||
| 		  NtClose (tmp_fh); |  | ||||||
| 		} |  | ||||||
| 	    } |  | ||||||
| 	} | 	} | ||||||
|       NtClose (recyclerdir); |       NtClose (recyclerdir); | ||||||
|       /* Shoot again. */ |       /* Shoot again. */ | ||||||
|   | |||||||
| @@ -23,7 +23,6 @@ wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = { | |||||||
|   is_server:false, |   is_server:false, | ||||||
|   has_mandatory_integrity_control:false, |   has_mandatory_integrity_control:false, | ||||||
|   needs_count_in_si_lpres2:false, |   needs_count_in_si_lpres2:false, | ||||||
|   has_recycle_dot_bin:false, |  | ||||||
|   has_gaa_on_link_prefix:false, |   has_gaa_on_link_prefix:false, | ||||||
|   has_gaa_largeaddress_bug:false, |   has_gaa_largeaddress_bug:false, | ||||||
|   supports_all_posix_ai_flags:false, |   supports_all_posix_ai_flags:false, | ||||||
| @@ -58,7 +57,6 @@ wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = { | |||||||
|   is_server:false, |   is_server:false, | ||||||
|   has_mandatory_integrity_control:false, |   has_mandatory_integrity_control:false, | ||||||
|   needs_count_in_si_lpres2:false, |   needs_count_in_si_lpres2:false, | ||||||
|   has_recycle_dot_bin:false, |  | ||||||
|   has_gaa_on_link_prefix:false, |   has_gaa_on_link_prefix:false, | ||||||
|   has_gaa_largeaddress_bug:false, |   has_gaa_largeaddress_bug:false, | ||||||
|   supports_all_posix_ai_flags:false, |   supports_all_posix_ai_flags:false, | ||||||
| @@ -93,7 +91,6 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = { | |||||||
|   is_server:false, |   is_server:false, | ||||||
|   has_mandatory_integrity_control:true, |   has_mandatory_integrity_control:true, | ||||||
|   needs_count_in_si_lpres2:true, |   needs_count_in_si_lpres2:true, | ||||||
|   has_recycle_dot_bin:true, |  | ||||||
|   has_gaa_on_link_prefix:true, |   has_gaa_on_link_prefix:true, | ||||||
|   has_gaa_largeaddress_bug:true, |   has_gaa_largeaddress_bug:true, | ||||||
|   supports_all_posix_ai_flags:true, |   supports_all_posix_ai_flags:true, | ||||||
| @@ -128,7 +125,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = { | |||||||
|   is_server:false, |   is_server:false, | ||||||
|   has_mandatory_integrity_control:true, |   has_mandatory_integrity_control:true, | ||||||
|   needs_count_in_si_lpres2:false, |   needs_count_in_si_lpres2:false, | ||||||
|   has_recycle_dot_bin:true, |  | ||||||
|   has_gaa_on_link_prefix:true, |   has_gaa_on_link_prefix:true, | ||||||
|   has_gaa_largeaddress_bug:true, |   has_gaa_largeaddress_bug:true, | ||||||
|   supports_all_posix_ai_flags:true, |   supports_all_posix_ai_flags:true, | ||||||
| @@ -163,7 +159,6 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = { | |||||||
|   is_server:false, |   is_server:false, | ||||||
|   has_mandatory_integrity_control:true, |   has_mandatory_integrity_control:true, | ||||||
|   needs_count_in_si_lpres2:false, |   needs_count_in_si_lpres2:false, | ||||||
|   has_recycle_dot_bin:true, |  | ||||||
|   has_gaa_on_link_prefix:true, |   has_gaa_on_link_prefix:true, | ||||||
|   has_gaa_largeaddress_bug:false, |   has_gaa_largeaddress_bug:false, | ||||||
|   supports_all_posix_ai_flags:true, |   supports_all_posix_ai_flags:true, | ||||||
| @@ -198,7 +193,6 @@ wincaps wincap_10 __attribute__((section (".cygwin_dll_common"), shared)) = { | |||||||
|   is_server:false, |   is_server:false, | ||||||
|   has_mandatory_integrity_control:true, |   has_mandatory_integrity_control:true, | ||||||
|   needs_count_in_si_lpres2:false, |   needs_count_in_si_lpres2:false, | ||||||
|   has_recycle_dot_bin:true, |  | ||||||
|   has_gaa_on_link_prefix:true, |   has_gaa_on_link_prefix:true, | ||||||
|   has_gaa_largeaddress_bug:false, |   has_gaa_largeaddress_bug:false, | ||||||
|   supports_all_posix_ai_flags:true, |   supports_all_posix_ai_flags:true, | ||||||
| @@ -233,7 +227,6 @@ wincaps wincap_10_1511 __attribute__((section (".cygwin_dll_common"), shared)) = | |||||||
|   is_server:false, |   is_server:false, | ||||||
|   has_mandatory_integrity_control:true, |   has_mandatory_integrity_control:true, | ||||||
|   needs_count_in_si_lpres2:false, |   needs_count_in_si_lpres2:false, | ||||||
|   has_recycle_dot_bin:true, |  | ||||||
|   has_gaa_on_link_prefix:true, |   has_gaa_on_link_prefix:true, | ||||||
|   has_gaa_largeaddress_bug:false, |   has_gaa_largeaddress_bug:false, | ||||||
|   supports_all_posix_ai_flags:true, |   supports_all_posix_ai_flags:true, | ||||||
|   | |||||||
| @@ -16,7 +16,6 @@ struct wincaps | |||||||
|   unsigned is_server                                    : 1; |   unsigned is_server                                    : 1; | ||||||
|   unsigned has_mandatory_integrity_control		: 1; |   unsigned has_mandatory_integrity_control		: 1; | ||||||
|   unsigned needs_count_in_si_lpres2			: 1; |   unsigned needs_count_in_si_lpres2			: 1; | ||||||
|   unsigned has_recycle_dot_bin				: 1; |  | ||||||
|   unsigned has_gaa_on_link_prefix			: 1; |   unsigned has_gaa_on_link_prefix			: 1; | ||||||
|   unsigned has_gaa_largeaddress_bug			: 1; |   unsigned has_gaa_largeaddress_bug			: 1; | ||||||
|   unsigned supports_all_posix_ai_flags			: 1; |   unsigned supports_all_posix_ai_flags			: 1; | ||||||
| @@ -76,7 +75,6 @@ public: | |||||||
|   bool  IMPLEMENT (is_server) |   bool  IMPLEMENT (is_server) | ||||||
|   bool	IMPLEMENT (has_mandatory_integrity_control) |   bool	IMPLEMENT (has_mandatory_integrity_control) | ||||||
|   bool	IMPLEMENT (needs_count_in_si_lpres2) |   bool	IMPLEMENT (needs_count_in_si_lpres2) | ||||||
|   bool	IMPLEMENT (has_recycle_dot_bin) |  | ||||||
|   bool	IMPLEMENT (has_gaa_on_link_prefix) |   bool	IMPLEMENT (has_gaa_on_link_prefix) | ||||||
|   bool	IMPLEMENT (has_gaa_largeaddress_bug) |   bool	IMPLEMENT (has_gaa_largeaddress_bug) | ||||||
|   bool	IMPLEMENT (supports_all_posix_ai_flags) |   bool	IMPLEMENT (supports_all_posix_ai_flags) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user