Skip to content

Commit

Permalink
Fix invalid parameters in SetFileInformationByHandle (dotnet#95096)
Browse files Browse the repository at this point in the history
According to MS-FSCC, "a value of -1 indicates to the server that it MUST NOT change this attribute for all subsequent operations"
This behavior is incorrect in the scope of .NET, since a call to File.SetLastAccessTime on a open file handle
will cause all future writes to not update the last write tim.

It also triggers STATUS_INVALID_PARAMETER on NFS, since the Windows driver doesn't seem to implement the -1 value (tracking of subsequent write operations)

Fixes dotnet#95096
  • Loading branch information
smx-smx committed Nov 25, 2023
1 parent 8b6ce7e commit d6bbc36
Showing 1 changed file with 8 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -464,10 +464,10 @@ public static unsafe void SetAttributes(SafeFileHandle fileHandle, FileAttribute
private static void SetFileTime(
string fullPath,
bool asDirectory,
long creationTime = -1,
long lastAccessTime = -1,
long lastWriteTime = -1,
long changeTime = -1,
long creationTime = 0,
long lastAccessTime = 0,
long lastWriteTime = 0,
long changeTime = 0,
uint fileAttributes = 0)
{
using SafeFileHandle handle = OpenHandleToWriteAttributes(fullPath, asDirectory);
Expand All @@ -477,10 +477,10 @@ private static void SetFileTime(
private static unsafe void SetFileTime(
SafeFileHandle fileHandle,
string? fullPath = null,
long creationTime = -1,
long lastAccessTime = -1,
long lastWriteTime = -1,
long changeTime = -1,
long creationTime = 0,
long lastAccessTime = 0,
long lastWriteTime = 0,
long changeTime = 0,
uint fileAttributes = 0)
{
var basicInfo = new Interop.Kernel32.FILE_BASIC_INFO
Expand Down

0 comments on commit d6bbc36

Please sign in to comment.