sys: security: change notification

This commit is contained in:
Bill Zissimopoulos 2016-12-27 22:24:42 -08:00
parent 5824a24bf4
commit ba312de59b
3 changed files with 12 additions and 3 deletions

View File

@ -111,7 +111,8 @@ static NTSTATUS FspFsvolCleanup(
Request->Req.Cleanup.UserContext2 = FileDesc->UserContext2; Request->Req.Cleanup.UserContext2 = FileDesc->UserContext2;
Request->Req.Cleanup.Delete = DeletePending; Request->Req.Cleanup.Delete = DeletePending;
Request->Req.Cleanup.SetAllocationSize = SetAllocationSize; Request->Req.Cleanup.SetAllocationSize = SetAllocationSize;
Request->Req.Cleanup.SetArchiveBit = FileModified && !FileDesc->DidSetFileAttributes; Request->Req.Cleanup.SetArchiveBit = (FileModified || FileDesc->DidSetSecurity) &&
!FileDesc->DidSetFileAttributes;
Request->Req.Cleanup.SetLastAccessTime = !FileDesc->DidSetLastAccessTime; Request->Req.Cleanup.SetLastAccessTime = !FileDesc->DidSetLastAccessTime;
Request->Req.Cleanup.SetLastWriteTime = FileModified && !FileDesc->DidSetLastWriteTime; Request->Req.Cleanup.SetLastWriteTime = FileModified && !FileDesc->DidSetLastWriteTime;
Request->Req.Cleanup.SetChangeTime = (FileModified || FileDesc->DidSetMetadata) && Request->Req.Cleanup.SetChangeTime = (FileModified || FileDesc->DidSetMetadata) &&
@ -162,7 +163,7 @@ NTSTATUS FspFsvolCleanupComplete(
ASSERT(FileNode == FileDesc->FileNode); ASSERT(FileNode == FileDesc->FileNode);
/* do the appropriate change notification; also invalidate dirinfo/etc. caches */ /* send the appropriate notification; also invalidate dirinfo/etc. caches */
if (Request->Req.Cleanup.Delete) if (Request->Req.Cleanup.Delete)
{ {
NotifyFilter = FileNode->IsDirectory ? NotifyFilter = FileNode->IsDirectory ?
@ -171,13 +172,17 @@ NTSTATUS FspFsvolCleanupComplete(
} }
else else
{ {
/* do change notification for any metadata changes */ /* send notification for any metadata changes */
NotifyFilter = 0; NotifyFilter = 0;
#if 0
/* do not send notification when resetting the allocation size */
if (Request->Req.Cleanup.SetAllocationSize) if (Request->Req.Cleanup.SetAllocationSize)
NotifyFilter |= FILE_NOTIFY_CHANGE_SIZE; NotifyFilter |= FILE_NOTIFY_CHANGE_SIZE;
#endif
if (Request->Req.Cleanup.SetArchiveBit) if (Request->Req.Cleanup.SetArchiveBit)
NotifyFilter |= FILE_NOTIFY_CHANGE_ATTRIBUTES; NotifyFilter |= FILE_NOTIFY_CHANGE_ATTRIBUTES;
#if 0 #if 0
/* do not send notification for implicit LastAccessTime changes */
if (Request->Req.Cleanup.SetLastAccessTime) if (Request->Req.Cleanup.SetLastAccessTime)
NotifyFilter |= FILE_NOTIFY_CHANGE_LAST_ACCESS; NotifyFilter |= FILE_NOTIFY_CHANGE_LAST_ACCESS;
#endif #endif

View File

@ -1220,6 +1220,7 @@ typedef struct
DidSetMetadata:1, DidSetMetadata:1,
DidSetFileAttributes:1, DidSetFileAttributes:1,
DidSetCreationTime:1, DidSetLastAccessTime:1, DidSetLastWriteTime:1, DidSetChangeTime:1, DidSetCreationTime:1, DidSetLastAccessTime:1, DidSetLastWriteTime:1, DidSetChangeTime:1,
DidSetSecurity:1,
DirectoryHasSuchFile:1; DirectoryHasSuchFile:1;
UNICODE_STRING DirectoryPattern; UNICODE_STRING DirectoryPattern;
UINT64 DirectoryOffset; UINT64 DirectoryOffset;

View File

@ -276,8 +276,11 @@ NTSTATUS FspFsvolSetSecurityComplete(
FspFileNodeSetSecurity(FileNode, 0, 0); FspFileNodeSetSecurity(FileNode, 0, 0);
} }
FileDesc->DidSetSecurity = TRUE;
FileDesc->DidSetMetadata = TRUE; FileDesc->DidSetMetadata = TRUE;
FspFileNodeNotifyChange(FileNode, FILE_NOTIFY_CHANGE_SECURITY, FILE_ACTION_MODIFIED, FALSE);
FspIopRequestContext(Request, RequestFileNode) = 0; FspIopRequestContext(Request, RequestFileNode) = 0;
FspFileNodeReleaseOwner(FileNode, Full, Request); FspFileNodeReleaseOwner(FileNode, Full, Request);