MiIncreaseCommitLimits
NTSTATUS __stdcall MiIncreaseCommitLimits(
_MI_PARTITION *Partition,
UINT64 InitialIncrement,
UINT64 MaximumIncrement,
UINT64 ConsumeInitialIncrement,
VOID *NewPageFile){
int v7;
NTSTATUS v8;
__int64 NumberOfPagingFiles;
__int64 v12;
_KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
v7 = ConsumeInitialIncrement;
v8 = 1;
KeAcquireInStackQueuedSpinLock(&Partition->Commit.EventLock, &LockHandle);
if( Partition->Commit.TotalCommitLimitMaximum + MaximumIncrement < Partition->Commit.TotalCommitLimitMaximum )
{
v8 = 0;
}
else
{
if( InitialIncrement )
{
if( v7 )
{
_InterlockedExchangeAdd64((volatile signed __int64 *)&Partition->Vp.TotalCommittedPages, InitialIncrement);
}
else if( Partition->Commit.OverCommit )
{
LODWORD(v12) = MiRestockOverCommit((INT64)Partition, InitialIncrement);
if( InitialIncrement != v12 )
_InterlockedExchangeAdd64(
(volatile signed __int64 *)&Partition->Vp.TotalCommittedPages,
InitialIncrement - v12);
}
Partition->Vp.TotalCommitLimit += InitialIncrement;
}
if( MaximumIncrement )
Partition->Commit.TotalCommitLimitMaximum += MaximumIncrement;
MiComputeCommitThresholds(Partition);
if( NewPageFile )
{
MiUpdatePageFileList((_MMPAGING_FILE *)NewPageFile, 1ui64);
_InterlockedExchangeAdd64((volatile signed __int64 *)&Partition->Vp.TotalCommittedPages, 2ui64);
NumberOfPagingFiles = Partition->Vp.NumberOfPagingFiles;
Partition->Vp.PagingFile[NumberOfPagingFiles] = (_MMPAGING_FILE *)NewPageFile;
Partition->Vp.NumberOfPagingFiles = NumberOfPagingFiles + 1;
}
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
return v8;
}Referenced by:
MiCreatePagingFile
MiExtendPagingFiles
MiFreePartitionPhysicalPages
MiInitializeCommitment
MiInsertPageFileInList
MiInsertPartitionPages
MiMapNewPfns