KeSetQuantumProcess
VOID __stdcall KeSetQuantumProcess(_EPROCESS *Process, INT8 QuantumReset){
unsigned __int8 CurrentIrql;
unsigned int *p_ProcessLock;
_LIST_ENTRY *p_ThreadListHead;
_LIST_ENTRY *i;
if( Process->Pcb.QuantumReset != QuantumReset )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
p_ProcessLock = &Process->Pcb.ProcessLock;
ExAcquireSpinLockExclusiveAtDpcLevel((INT64 *)&Process->Pcb.ProcessLock);
Process->Pcb.QuantumReset = QuantumReset;
p_ThreadListHead = &Process->Pcb.ThreadListHead;
for( i = p_ThreadListHead->Flink; i != p_ThreadListHead; i = i->Flink )
BYTE3(i[-7].Flink) = QuantumReset;
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)p_ProcessLock);
__writecr8(CurrentIrql);
}
}Referenced by:
KeSetPriorityAndQuantumProcess
PsChangeQuantumTable
PspApplyJobLimitsToProcess