diff --git a/src/sys/driver.h b/src/sys/driver.h index 9758c5bc..8b7af81f 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -1022,6 +1022,9 @@ BOOLEAN FspFileNodeTrySetSecurity(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG static inline ULONG FspFileNodeSecurityChangeNumber(FSP_FILE_NODE *FileNode) { + if (0 != FileNode->MainFileNode) + FileNode = FileNode->MainFileNode; + return FileNode->SecurityChangeNumber; } BOOLEAN FspFileNodeReferenceDirInfo(FSP_FILE_NODE *FileNode, PCVOID *PBuffer, PULONG PSize); diff --git a/src/sys/file.c b/src/sys/file.c index 97cb10c9..57487a58 100644 --- a/src/sys/file.c +++ b/src/sys/file.c @@ -945,6 +945,9 @@ BOOLEAN FspFileNodeReferenceSecurity(FSP_FILE_NODE *FileNode, PCVOID *PBuffer, P { PAGED_CODE(); + if (0 != FileNode->MainFileNode) + FileNode = FileNode->MainFileNode; + FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FileNode->FsvolDeviceObject); @@ -956,6 +959,9 @@ VOID FspFileNodeSetSecurity(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG Size) { PAGED_CODE(); + if (0 != FileNode->MainFileNode) + FileNode = FileNode->MainFileNode; + FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FileNode->FsvolDeviceObject); @@ -970,6 +976,9 @@ BOOLEAN FspFileNodeTrySetSecurity(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG { PAGED_CODE(); + if (0 != FileNode->MainFileNode) + FileNode = FileNode->MainFileNode; + if (FileNode->SecurityChangeNumber != SecurityChangeNumber) return FALSE;