https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2ce071d19a78c4ac663fa…
commit 2ce071d19a78c4ac663facdb7d2fcd5566299e6f
Author: Pierre Schweitzer <pierre(a)reactos.org>
AuthorDate: Sat Oct 27 19:32:42 2018 +0200
Commit: Pierre Schweitzer <pierre(a)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 */