- Move some unimplemented Ex* Pool routines into ARM3's expool.c.

- Move some unimplemented Mm* Pool routines into ARM3's pool.c.


svn path=/trunk/; revision=43508
This commit is contained in:
ReactOS Portable Systems Group 2009-10-16 00:28:33 +00:00
parent c0bb477b78
commit d37d315a7e
3 changed files with 106 additions and 146 deletions

View file

@ -16,6 +16,9 @@
#define MODULE_INVOLVED_IN_ARM3 #define MODULE_INVOLVED_IN_ARM3
#include "../ARM3/miarm.h" #include "../ARM3/miarm.h"
#undef ExAllocatePoolWithQuota
#undef ExAllocatePoolWithQuotaTag
/* GLOBALS ********************************************************************/ /* GLOBALS ********************************************************************/
POOL_DESCRIPTOR NonPagedPoolDescriptor; POOL_DESCRIPTOR NonPagedPoolDescriptor;
@ -637,4 +640,67 @@ ExFreeArmPool(PVOID P)
ExFreeArmPoolWithTag(P, 0); ExFreeArmPoolWithTag(P, 0);
} }
/*
* @unimplemented
*/
SIZE_T
NTAPI
ExQueryPoolBlockSize(IN PVOID PoolBlock,
OUT PBOOLEAN QuotaCharged)
{
//
// Not implemented
//
UNIMPLEMENTED;
return FALSE;
}
/*
* @implemented
*/
PVOID
NTAPI
ExAllocatePoolWithQuota(IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes)
{
//
// Allocate the pool
//
return ExAllocatePoolWithQuotaTag(PoolType, NumberOfBytes, 'enoN');
}
/*
* @implemented
*/
PVOID
NTAPI
ExAllocatePoolWithTagPriority(IN POOL_TYPE PoolType,
IN SIZE_T NumberOfBytes,
IN ULONG Tag,
IN EX_POOL_PRIORITY Priority)
{
//
// Allocate the pool
//
UNIMPLEMENTED;
return ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag);
}
/*
* @implemented
*/
PVOID
NTAPI
ExAllocatePoolWithQuotaTag(IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes,
IN ULONG Tag)
{
//
// Allocate the pool
//
UNIMPLEMENTED;
return ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag);
}
/* EOF */ /* EOF */

View file

@ -711,4 +711,44 @@ MiFreePoolPages(IN PVOID StartingVa)
return NumberOfPages; return NumberOfPages;
} }
BOOLEAN
NTAPI
MiRaisePoolQuota(IN POOL_TYPE PoolType,
IN ULONG CurrentMaxQuota,
OUT PULONG NewMaxQuota)
{
//
// Not implemented
//
UNIMPLEMENTED;
*NewMaxQuota = CurrentMaxQuota + 65536;
return TRUE;
}
/* PUBLIC FUNCTIONS ***********************************************************/
/*
* @unimplemented
*/
PVOID
NTAPI
MmAllocateMappingAddress(IN SIZE_T NumberOfBytes,
IN ULONG PoolTag)
{
UNIMPLEMENTED;
return NULL;
}
/*
* @unimplemented
*/
VOID
NTAPI
MmFreeMappingAddress(IN PVOID BaseAddress,
IN ULONG PoolTag)
{
UNIMPLEMENTED;
}
/* EOF */ /* EOF */

View file

@ -165,79 +165,6 @@ ExAllocatePoolWithTag (POOL_TYPE PoolType, ULONG NumberOfBytes, ULONG Tag)
return(Block); return(Block);
} }
/*
* @implemented
*/
#undef ExAllocatePoolWithQuota
#undef ExAllocatePoolWithQuotaTag
PVOID NTAPI
ExAllocatePoolWithQuota (POOL_TYPE PoolType, ULONG NumberOfBytes)
{
return(ExAllocatePoolWithQuotaTag(PoolType, NumberOfBytes, TAG_NONE));
}
/*
* @implemented
*/
PVOID
NTAPI
ExAllocatePoolWithTagPriority(
IN POOL_TYPE PoolType,
IN SIZE_T NumberOfBytes,
IN ULONG Tag,
IN EX_POOL_PRIORITY Priority
)
{
/* Do the allocation */
UNIMPLEMENTED;
return ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag);
}
/*
* @implemented
*/
PVOID
NTAPI
ExAllocatePoolWithQuotaTag (IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes,
IN ULONG Tag)
{
PEPROCESS Process;
PVOID Block;
/* Allocate the Pool First */
Block = EiAllocatePool(PoolType,
NumberOfBytes,
Tag,
&ExAllocatePoolWithQuotaTag);
/* "Quota is not charged to the thread for allocations >= PAGE_SIZE" - OSR Docs */
if (!(NumberOfBytes >= PAGE_SIZE))
{
/* Get the Current Process */
Process = PsGetCurrentProcess();
/* PsChargePoolQuota returns an exception, so this needs SEH */
_SEH2_TRY
{
/* FIXME: Is there a way to get the actual Pool size allocated from the pool header? */
PsChargePoolQuota(Process,
PoolType & PAGED_POOL_MASK,
NumberOfBytes);
}
_SEH2_EXCEPT((ExFreePool(Block), EXCEPTION_CONTINUE_SEARCH))
{
/* Quota Exceeded and the caller had no SEH! */
KeBugCheck(STATUS_QUOTA_EXCEEDED);
}
_SEH2_END;
}
/* Return the allocated block */
return Block;
}
/* /*
* @implemented * @implemented
*/ */
@ -307,77 +234,4 @@ ExFreePoolWithTag(
} }
} }
/*
* @unimplemented
*/
SIZE_T
NTAPI
ExQueryPoolBlockSize (
IN PVOID PoolBlock,
OUT PBOOLEAN QuotaCharged
)
{
UNIMPLEMENTED;
return FALSE;
}
/*
* @unimplemented
*/
PVOID
NTAPI
MmAllocateMappingAddress (
IN SIZE_T NumberOfBytes,
IN ULONG PoolTag
)
{
UNIMPLEMENTED;
return 0;
}
/*
* @unimplemented
*/
VOID
NTAPI
MmFreeMappingAddress (
IN PVOID BaseAddress,
IN ULONG PoolTag
)
{
UNIMPLEMENTED;
}
BOOLEAN
NTAPI
MiRaisePoolQuota(
IN POOL_TYPE PoolType,
IN ULONG CurrentMaxQuota,
OUT PULONG NewMaxQuota
)
{
/* Different quota raises depending on the type (64K vs 512K) */
if (PoolType == PagedPool) {
/* Make sure that 4MB is still left */
if ((MM_PAGED_POOL_SIZE >> 12) < ((MmPagedPoolSize + 4194304) >> 12)) {
return FALSE;
}
/* Increase Paged Pool Quota by 512K */
MmTotalPagedPoolQuota += 524288;
*NewMaxQuota = CurrentMaxQuota + 524288;
return TRUE;
} else { /* Nonpaged Pool */
/* Check if we still have 200 pages free*/
if (MmStats.NrFreePages < 200) return FALSE;
*NewMaxQuota = CurrentMaxQuota + 65536;
return TRUE;
}
}
/* EOF */ /* EOF */