Initialize process quota subsystem
Some checks failed
Builds / ExectOS (amd64, release) (push) Failing after 31s
Builds / ExectOS (amd64, debug) (push) Failing after 40s
Builds / ExectOS (i686, release) (push) Failing after 27s
Builds / ExectOS (i686, debug) (push) Failing after 38s

This commit is contained in:
2026-07-11 01:43:23 +02:00
parent b77a57a0e3
commit 8ad412ecb5
3 changed files with 34 additions and 0 deletions

View File

@@ -22,6 +22,7 @@ namespace PS
STATIC KSPIN_LOCK QuotaLock;
public:
STATIC VOID XTAPI InitializeQuota(VOID);
STATIC XTFASTCALL VOID ReturnProcessQuota(IN PEPROCESS_QUOTA_BLOCK QuotaBlock,
IN PEPROCESS Process,
IN PS_QUOTA_TYPE QuotaType,

View File

@@ -77,4 +77,7 @@ PS::ProcessManager::InitializeProcessManager(VOID)
ObjectTypeInitializer.GenericMapping = PS_THREAD_GENERIC_MAPPING;
ObjectTypeInitializer.ValidAccessMask = SE_THREAD_ALL_ACCESS;
OB::TypeRegistry::CreateObjectType(&ObjectTypeName, &ObjectTypeInitializer, NULLPTR, &ThreadType);
/* Initialize system quota */
PS::Quota::InitializeQuota();
}

View File

@@ -67,6 +67,36 @@ PS::Quota::DereferenceQuotaBlock(IN PEPROCESS_QUOTA_BLOCK QuotaBlock)
}
}
/**
* Initializes the system-wide process quota subsystem.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
VOID
XTAPI
PS::Quota::InitializeQuota(VOID)
{
/* Initialize the quota lock */
KE::SpinLock::InitializeSpinLock(&QuotaLock);
/* Clear the default quota block */
RtlZeroMemory(&DefaultQuotaBlock, sizeof(DefaultQuotaBlock));
/* Set up the counters */
DefaultQuotaBlock.ProcessCount = 1;
DefaultQuotaBlock.ReferenceCount = 1;
/* Set up the limits */
DefaultQuotaBlock.QuotaEntry[PsNonPagedPool].Limit = (SIZE_T)-1;
DefaultQuotaBlock.QuotaEntry[PsPagedPool].Limit = (SIZE_T)-1;
DefaultQuotaBlock.QuotaEntry[PsPageFile].Limit = (SIZE_T)-1;
/* Assign the default quota block to the current process */
PS::Process::GetCurrentProcess()->QuotaBlock = &DefaultQuotaBlock;
}
/**
* Returns a specified amount of quota to a quota block and updates process usage.
*