- only mask out the generic rights flags in RtlMapGenericMask() - only deny access when requested rights can't be granted in IoCheckDesiredAccess() Modified: trunk/reactos/ntoskrnl/io/share.c Modified: trunk/reactos/ntoskrnl/se/access.c _____
Modified: trunk/reactos/ntoskrnl/io/share.c --- trunk/reactos/ntoskrnl/io/share.c 2005-03-20 13:32:27 UTC (rev 14221) +++ trunk/reactos/ntoskrnl/io/share.c 2005-03-20 13:53:54 UTC (rev 14222) @@ -280,12 +280,15 @@
IoCheckDesiredAccess(IN OUT PACCESS_MASK DesiredAccess, IN ACCESS_MASK GrantedAccess) { + PAGED_CODE(); + RtlMapGenericMask(DesiredAccess, IoFileObjectType->Mapping); - if ((*DesiredAccess & GrantedAccess) != GrantedAccess) - return(STATUS_ACCESS_DENIED);
- return(STATUS_SUCCESS); + if ((~(*DesiredAccess) & GrantedAccess) != 0) + return STATUS_ACCESS_DENIED; + else + return STATUS_SUCCESS; }
_____
Modified: trunk/reactos/ntoskrnl/se/access.c --- trunk/reactos/ntoskrnl/se/access.c 2005-03-20 13:32:27 UTC (rev 14221) +++ trunk/reactos/ntoskrnl/se/access.c 2005-03-20 13:53:54 UTC (rev 14222) @@ -72,7 +72,7 @@
if (*AccessMask & GENERIC_ALL) *AccessMask |= GenericMapping->GenericAll;
- *AccessMask &= 0x0FFFFFFF; + *AccessMask &= ~(GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | GENERIC_ALL); }
/*