mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
sys: security: change notification
This commit is contained in:
parent
5824a24bf4
commit
ba312de59b
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user