File tree Expand file tree Collapse file tree
src/Core/SecureFolderFS.Core.WinFsp/Callbacks Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -71,8 +71,9 @@ private static FileOptions ToFileOptions(uint createOptions)
7171 if ( ( createOptions & FILE_RANDOM_ACCESS ) != 0 )
7272 options |= FileOptions . RandomAccess ;
7373
74- if ( ( createOptions & FILE_DELETE_ON_CLOSE ) != 0 )
75- options |= FileOptions . DeleteOnClose ;
74+ // Never handle DELETE_ON_CLOSE
75+ // WinFsp already tracks the delete disposition and will call Cleanup with CleanupDelete.
76+ // Letting the real FileStream have DeleteOnClose bypasses your custom DeleteOrRecycle logic.
7677
7778 return options ;
7879 }
Original file line number Diff line number Diff line change @@ -912,23 +912,32 @@ public override void Cleanup(
912912 }
913913 }
914914
915- // Close handle first
916- CloseHandle ( FileDesc ) ;
917- InvalidateContext ( out FileDesc ) ;
918- Trace ( STATUS_SUCCESS , FileName ) ;
919-
920915 try
921916 {
922917 if ( pathToDelete is null )
923918 return ;
924919
920+ var exists = File . Exists ( pathToDelete ) || Directory . Exists ( pathToDelete ) ;
921+ if ( ! exists )
922+ {
923+ Trace ( STATUS_OBJECT_NAME_NOT_FOUND , FileName ) ;
924+ return ;
925+ }
926+
925927 // Then delete
926928 NativeRecycleBinHelpers . DeleteOrRecycle ( pathToDelete , _specifics , storableType ) ;
929+ Trace ( STATUS_SUCCESS , FileName ) ;
927930 }
928931 catch ( Exception )
929932 {
930933 Trace ( STATUS_UNSUCCESSFUL , FileName ) ;
931934 }
935+ finally
936+ {
937+ // Close handle
938+ CloseHandle ( FileDesc ) ;
939+ InvalidateContext ( out FileDesc ) ;
940+ }
932941 }
933942
934943 /// <inheritdoc/>
You can’t perform that action at this time.
0 commit comments