2005-04-18 02:12:30 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS kernel
|
|
|
|
* FILE: ntoskrnl/ps/quota.c
|
|
|
|
* PURPOSE: Process Pool Quotas
|
2005-05-09 01:38:29 +00:00
|
|
|
*
|
2005-04-18 02:12:30 +00:00
|
|
|
* PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* INCLUDES **************************************************************/
|
|
|
|
|
|
|
|
#include <ntoskrnl.h>
|
|
|
|
#define NDEBUG
|
|
|
|
#include <internal/debug.h>
|
|
|
|
|
2006-09-16 20:37:49 +00:00
|
|
|
EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock;
|
|
|
|
|
2005-04-18 02:12:30 +00:00
|
|
|
/* FUNCTIONS ***************************************************************/
|
|
|
|
|
2006-09-16 20:37:49 +00:00
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
PsInitializeQuotaSystem(VOID)
|
|
|
|
{
|
|
|
|
RtlZeroMemory(&PspDefaultQuotaBlock, sizeof(PspDefaultQuotaBlock));
|
|
|
|
PspDefaultQuotaBlock.QuotaEntry[PagedPool].Limit = (SIZE_T)-1;
|
|
|
|
PspDefaultQuotaBlock.QuotaEntry[NonPagedPool].Limit = (SIZE_T)-1;
|
|
|
|
PspDefaultQuotaBlock.QuotaEntry[2].Limit = (SIZE_T)-1; /* Page file */
|
|
|
|
PsGetCurrentProcess()->QuotaBlock = &PspDefaultQuotaBlock;
|
|
|
|
}
|
|
|
|
|
2005-08-01 11:20:44 +00:00
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
PspInheritQuota(PEPROCESS Process, PEPROCESS ParentProcess)
|
|
|
|
{
|
|
|
|
if (ParentProcess != NULL)
|
2005-08-01 11:58:47 +00:00
|
|
|
{
|
|
|
|
PEPROCESS_QUOTA_BLOCK QuotaBlock = ParentProcess->QuotaBlock;
|
|
|
|
|
|
|
|
ASSERT(QuotaBlock != NULL);
|
2005-08-01 11:20:44 +00:00
|
|
|
|
2006-03-04 17:27:40 +00:00
|
|
|
(void)InterlockedIncrementUL(&QuotaBlock->ReferenceCount);
|
2005-08-01 11:58:47 +00:00
|
|
|
|
|
|
|
Process->QuotaBlock = QuotaBlock;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Process->QuotaBlock = &PspDefaultQuotaBlock;
|
2005-08-01 11:20:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
PspDestroyQuotaBlock(PEPROCESS Process)
|
|
|
|
{
|
|
|
|
PEPROCESS_QUOTA_BLOCK QuotaBlock = Process->QuotaBlock;
|
|
|
|
|
2005-08-01 11:58:47 +00:00
|
|
|
if (QuotaBlock != &PspDefaultQuotaBlock &&
|
|
|
|
InterlockedDecrementUL(&QuotaBlock->ReferenceCount) == 0)
|
2005-08-01 11:20:44 +00:00
|
|
|
{
|
2005-08-01 11:58:47 +00:00
|
|
|
ExFreePool(QuotaBlock);
|
2005-08-01 11:20:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-04-18 02:12:30 +00:00
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
PsChargePoolQuota(IN PEPROCESS Process,
|
|
|
|
IN POOL_TYPE PoolType,
|
2005-06-18 18:32:29 +00:00
|
|
|
IN ULONG Amount)
|
2005-04-18 02:12:30 +00:00
|
|
|
{
|
|
|
|
NTSTATUS Status;
|
|
|
|
|
|
|
|
/* Charge the usage */
|
|
|
|
Status = PsChargeProcessPoolQuota(Process, PoolType, Amount);
|
|
|
|
|
|
|
|
/* Raise Exception */
|
2005-05-09 01:38:29 +00:00
|
|
|
if (!NT_SUCCESS(Status))
|
2005-04-18 02:12:30 +00:00
|
|
|
{
|
|
|
|
ExRaiseStatus(Status);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
|
|
|
NTSTATUS
|
|
|
|
STDCALL
|
|
|
|
PsChargeProcessNonPagedPoolQuota(IN PEPROCESS Process,
|
|
|
|
IN ULONG_PTR Amount)
|
|
|
|
{
|
|
|
|
/* Call the general function */
|
|
|
|
return PsChargeProcessPoolQuota(Process, NonPagedPool, Amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
|
|
|
NTSTATUS
|
|
|
|
STDCALL
|
|
|
|
PsChargeProcessPagedPoolQuota(IN PEPROCESS Process,
|
|
|
|
IN ULONG_PTR Amount)
|
|
|
|
{
|
|
|
|
/* Call the general function */
|
|
|
|
return PsChargeProcessPoolQuota(Process, PagedPool, Amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
|
|
|
NTSTATUS
|
|
|
|
STDCALL
|
|
|
|
PsChargeProcessPoolQuota(IN PEPROCESS Process,
|
|
|
|
IN POOL_TYPE PoolType,
|
2005-06-18 18:32:29 +00:00
|
|
|
IN ULONG Amount)
|
2005-04-18 02:12:30 +00:00
|
|
|
{
|
2007-09-24 14:01:54 +00:00
|
|
|
UNIMPLEMENTED;
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
2005-04-18 02:12:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
2005-05-09 01:38:29 +00:00
|
|
|
*/
|
2005-04-18 02:12:30 +00:00
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
PsReturnPoolQuota(IN PEPROCESS Process,
|
|
|
|
IN POOL_TYPE PoolType,
|
|
|
|
IN ULONG_PTR Amount)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
2005-05-09 01:38:29 +00:00
|
|
|
}
|
2005-04-18 02:12:30 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
2005-05-09 01:38:29 +00:00
|
|
|
*/
|
2005-04-18 02:12:30 +00:00
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
PsReturnProcessNonPagedPoolQuota(IN PEPROCESS Process,
|
|
|
|
IN ULONG_PTR Amount)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
2005-05-09 01:38:29 +00:00
|
|
|
}
|
2005-04-18 02:12:30 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
2005-05-09 01:38:29 +00:00
|
|
|
*/
|
2005-04-18 02:12:30 +00:00
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
PsReturnProcessPagedPoolQuota(IN PEPROCESS Process,
|
|
|
|
IN ULONG_PTR Amount)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* EOF */
|