KiInitPrcb
VOID __stdcall KiInitPrcb(_KPRCB *Prcb, UINT64 Number){
_LIST_ENTRY *DispatcherReadyListHead;
int v4;
__int64 v5;
__int64 v6;
__int64 v7;
_LIST_ENTRY *v8;
__int64 i;
Prcb->QueueIndex = 1;
Prcb->ReadySummary = 0;
Prcb->ReadyThreadCount = 0;
DispatcherReadyListHead = Prcb->DispatcherReadyListHead;
Prcb->ReadyQueueExpectedRunTime = 0i64;
v4 = Number;
v5 = 32i64;
Prcb->DeferredReadyListHead.Next = 0i64;
v6 = 32i64;
do
{
DispatcherReadyListHead->Blink = DispatcherReadyListHead;
DispatcherReadyListHead->Flink = DispatcherReadyListHead;
++DispatcherReadyListHead;
--v6;
}
while( v6 );
v7 = 0i64;
Prcb->SharedReadyQueue->Lock = 0i64;
Prcb->SharedReadyQueue->ReadySummary = 0;
Prcb->SharedReadyQueue->ReadyThreadCount = 0;
Prcb->SharedReadyQueue->ReadyQueueExpectedRunTime = 0i64;
do
{
v8 = &Prcb->SharedReadyQueue->ReadyListHead[v7++];
v8->Blink = v8;
v8->Flink = v8;
--v5;
}
while( v5 );
memset(Prcb->SharedReadyQueue->RunningSummary, 127i64, sizeof(Prcb->SharedReadyQueue->RunningSummary));
Prcb->SharedReadyQueue->Span = 1;
Prcb->SharedReadyQueue->LowProcIndex = Prcb->GroupIndex;
for( i = 0i64; i < 2; ++i )
*(&Prcb->SharedReadyQueue->QueueIndex + i) = 1;
Prcb->SharedReadyQueue->Affinity = Prcb->GroupSetMember;
Prcb->PriorityState = Prcb->SharedReadyQueue->RunningSummary;
KiInitializeDpcList(&Prcb->DpcData[0].DpcList);
Prcb->DpcData[0].DpcLock = 0i64;
Prcb->DpcData[0].DpcQueueDepth = 0;
Prcb->$A81AFC2514E605CDBADB8E27B49DE82B::_bf_0 = 0;
Prcb->DpcRoutineActive = 0;
Prcb->DpcData[0].DpcCount = 0;
Prcb->MaximumDpcQueueDepth = KiMaximumDpcQueueDepth;
Prcb->MinimumDpcRate = KiMinimumDpcRate;
Prcb->AdjustDpcThreshold = KiAdjustDpcThreshold;
KeInitializeDpc(&Prcb->CallDpc, KiDpcWatchdog, 0i64);
if( !Prcb->CallDpc.DpcData )
Prcb->CallDpc.Number = v4 + 1280;
Prcb->CallDpc.Importance = 2;
Prcb->WaitListHead.Blink = &Prcb->WaitListHead;
Prcb->WaitListHead.Flink = &Prcb->WaitListHead;
Prcb->CurrentDpcRuntimeHistoryCached = 1i64;
InitializeSListHead(&Prcb->InterruptObjectPool);
KeGetPcr()->NtTib.ArbitraryUserPointer = Prcb->LockQueue;
Prcb->LockQueue[14].Lock = (unsigned __int64 *volatile)&CcBcbSpinLock;
Prcb->LockQueue[14].Next = 0i64;
Prcb->LockQueue[5].Lock = (unsigned __int64 *volatile)&CcMasterSpinLock;
Prcb->LockQueue[4].Lock = (unsigned __int64 *volatile)&CcVacbSpinLock;
Prcb->LockQueue[6].Lock = (unsigned __int64 *volatile)&NonPagedPoolLock;
Prcb->LockQueue[7].Lock = (unsigned __int64 *volatile)&IopCancelSpinLock;
Prcb->LockQueue[9].Lock = (unsigned __int64 *volatile)&IopVpbSpinLock;
Prcb->LockQueue[10].Lock = (unsigned __int64 *volatile)&IopDatabaseLock;
Prcb->LockQueue[11].Lock = (unsigned __int64 *volatile)&IopCompletionLock;
Prcb->LockQueue[12].Lock = (unsigned __int64 *volatile)&NtfsStructLock;
Prcb->LockQueue[13].Lock = (unsigned __int64 *volatile)&AfdWorkQueueSpinLock;
Prcb->LockQueue[5].Next = 0i64;
Prcb->LockQueue[4].Next = 0i64;
Prcb->LockQueue[6].Next = 0i64;
Prcb->LockQueue[7].Next = 0i64;
Prcb->LockQueue[9].Next = 0i64;
Prcb->LockQueue[10].Next = 0i64;
Prcb->LockQueue[11].Next = 0i64;
Prcb->LockQueue[12].Next = 0i64;
Prcb->LockQueue[13].Next = 0i64;
Prcb->LockQueue[16].Next = 0i64;
Prcb->LockQueue[16].Lock = 0i64;
Prcb->EntropyTimingState.EntropyCount = (3 * (_WORD)v4) & 0x3FF;
Prcb->PrcbLock = 0i64;
Prcb->WaitLock = 0i64;
Prcb->ClockKeepAlive = 1;
KeInitializeDpc(&Prcb->EntropyTimingState.Dpc, KiEntropyDpcRoutine, &Prcb->EntropyTimingState);
if( !v4 )
{
KiClockPollCycle = KiClockKeepAliveCycle;
KiReverseStallIpiLock = 0i64;
CcBcbSpinLock = 0i64;
CcMasterSpinLock = 0i64;
CcVacbSpinLock = 0i64;
IopCancelSpinLock = 0i64;
IopCompletionLock = 0i64;
IopDatabaseLock = 0i64;
IopVpbSpinLock = 0i64;
NonPagedPoolLock = 0i64;
NtfsStructLock = 0i64;
AfdWorkQueueSpinLock = 0i64;
*(_DWORD *)&KeSleepingProcessors.Count = 1310740;
memset(&KeSleepingProcessors.Reserved, 0i64, 0xA4u);
}
KiIntSteerInitPrcb(Prcb);
KeInitializeDpc(&Prcb->AbDpc, KiAbDeferredProcessingWorker, 0i64);
if( !Prcb->AbDpc.DpcData )
Prcb->AbDpc.Number = v4 + 1280;
}Referenced by:
KiInitializeBootStructures