_In_ KPROCESSOR_MODE AccessMode,
_In_ BOOLEAN CaptureIfKernel);
+NTSTATUS
+NTAPI
+SeComputeQuotaInformationSize(
+ _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ _Out_ PULONG QuotaInfoSize);
+
NTSTATUS
NTAPI
SepCaptureAcl(
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 */