https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2ce071d19a78c4ac663fac...
commit 2ce071d19a78c4ac663facdb7d2fcd5566299e6f Author: Pierre Schweitzer pierre@reactos.org AuthorDate: Sat Oct 27 19:32:42 2018 +0200 Commit: Pierre Schweitzer pierre@reactos.org CommitDate: Sat Oct 27 19:36:14 2018 +0200
[NTOSKRNL] Implement SeComputeQuotaInformationSize() --- ntoskrnl/include/internal/se.h | 6 ++++++ ntoskrnl/se/sd.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+)
diff --git a/ntoskrnl/include/internal/se.h b/ntoskrnl/include/internal/se.h index 6095bd9e01..563cd23d33 100644 --- a/ntoskrnl/include/internal/se.h +++ b/ntoskrnl/include/internal/se.h @@ -485,6 +485,12 @@ SeReleaseSidAndAttributesArray( _In_ KPROCESSOR_MODE AccessMode, _In_ BOOLEAN CaptureIfKernel);
+NTSTATUS +NTAPI +SeComputeQuotaInformationSize( + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PULONG QuotaInfoSize); + NTSTATUS NTAPI SepCaptureAcl( diff --git a/ntoskrnl/se/sd.c b/ntoskrnl/se/sd.c index ab10515e79..37dc1a162b 100644 --- a/ntoskrnl/se/sd.c +++ b/ntoskrnl/se/sd.c @@ -1429,4 +1429,46 @@ SeAssignSecurity( PoolType); }
+/* + * @implemented + */ +_IRQL_requires_max_(PASSIVE_LEVEL) +NTSTATUS +NTAPI +SeComputeQuotaInformationSize( + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PULONG QuotaInfoSize) +{ + PSID Group; + PACL Dacl; + + PAGED_CODE(); + + *QuotaInfoSize = 0; + + /* Validate security descriptor revision */ + if (((PISECURITY_DESCRIPTOR)SecurityDescriptor)->Revision != SECURITY_DESCRIPTOR_REVISION1) + { + return STATUS_UNKNOWN_REVISION; + } + + /* Get group and DACL, if any */ + Group = SepGetGroupFromDescriptor(SecurityDescriptor); + Dacl = SepGetDaclFromDescriptor(SecurityDescriptor); + + /* Return SID length if any */ + if (Group != NULL) + { + *QuotaInfoSize = ALIGN_UP_BY(RtlLengthSid(Group), sizeof(ULONG)); + } + + /* Return DACL if any */ + if (Dacl != NULL) + { + *QuotaInfoSize += ALIGN_UP_BY(Dacl->AclSize, sizeof(ULONG)); + } + + return STATUS_SUCCESS; +} + /* EOF */