MiInitializePartition
VOID __stdcall MiInitializePartition(_MI_PARTITION *Partition, UINT16 PartitionId){
int v3;
int v4;
__int64 *v5;
unsigned int v6;
__int64 i;
char *v8;
__int64 v9;
__int64 v10;
__int64 v11;
__int64 v12;
unsigned int v13;
__int64 j;
int v15;
__int64 v16;
unsigned int v17;
char *v18;
unsigned int k;
unsigned int v20;
unsigned int v21;
__int64 m;
__int64 v23;
signed int v24;
__int64 v25;
char *v26;
__int64 v27;
__int64 v28;
_KEVENT *v29;
char *v30;
__m128i si128;
__int64 v32;
_KEVENT *v33;
INT64 v34;
_ETHREAD *CurrentThread;
*(_WORD *)Partition = PartitionId;
*((_DWORD *)Partition + 2) = 305535296;
*((_DWORD *)Partition + 1) = 0;
v3 = 0;
*((_QWORD *)Partition + 616) = 0i64;
if( Partition != (_MI_PARTITION *)&MiSystemPartition )
v3 = 32;
*((_DWORD *)Partition + 1) = v3;
KeInitializeEvent((_KEVENT *)((char *)Partition + 104), NotificationEvent, 0);
KeInitializeEvent((_KEVENT *)((char *)Partition + 5144), SynchronizationEvent, 0);
v4 = 0;
v5 = (__int64 *)((char *)Partition + 2176);
do
{
v6 = 0;
for( i = *v5; v6 < dword_140C4DC3C; i += 40i64 )
{
*(_DWORD *)(i + 8) = v4;
++v6;
*(_QWORD *)(i + 16) = 0xFFFFFFFFFi64;
*(_QWORD *)(i + 24) = 0xFFFFFFFFFi64;
*(_QWORD *)i = 0i64;
*(_QWORD *)(i + 32) = 0i64;
}
++v4;
++v5;
}
while( v4 <= 1 );
MiInitializePfnListHead((INT64)Partition + 2240, 0i64);
MiInitializePfnListHead((INT64)Partition + 2304, 1i64);
MiInitializePfnListHead((INT64)Partition + 2368, 2i64);
MiInitializePfnListHead((INT64)Partition + 4160, 5i64);
v8 = (char *)Partition + 2432;
do
{
MiInitializePfnListHead((INT64)v8, 2i64);
v8 = (char *)(v11 + 40);
}
while( v12 != 1 );
*((_QWORD *)Partition + 527) = (char *)Partition + 2240;
*((_QWORD *)Partition + 528) = v9;
*((_QWORD *)Partition + 529) = v10;
MiInitializeLargePageNodeLists(Partition);
v13 = 0;
for( j = *((_QWORD *)Partition + 2); v13 < (unsigned __int16)KeNumberNodes; *(_DWORD *)(4544 * v16 + j + 4184) = v15 )
{
v15 = RtlRandomEx((UINT64 *)&Seed);
v16 = v13++;
}
v17 = 0;
v18 = (char *)Partition + 5184;
do
{
for( k = 0; k < 4; ++k )
{
MiInitializeSlabAllocator((INT64)v18, v17, k);
v18 += 120;
}
++v17;
}
while( v17 < 2 );
v20 = dword_140C4DC3C;
v21 = 0;
for( m = *((_QWORD *)Partition + 525); v21 < 2 * dword_140C4DC3C; ++v21 )
{
InitializeSListHead((_SLIST_HEADER *)(m + 16i64 * v21));
v20 = dword_140C4DC3C;
}
v23 = 16i64;
v24 = (unsigned int)(*((_QWORD *)Partition + 866) / 0x64ui64) / v20;
if( v24 < 4 )
v24 = 4;
if( v24 > 16 )
v24 = 16;
*((_DWORD *)Partition + 1575) = v24;
if( Partition == (_MI_PARTITION *)&MiSystemPartition )
MiInitializePfnListHead((INT64)&qword_140C4C800, 5i64);
v25 = 3i64;
MiInitializePfnListHead((INT64)Partition + 7488, 3i64);
MiInitializePfnListHead((INT64)Partition + 7552, 4i64);
MiInitializePfnListHead((INT64)Partition + 2752, 3i64);
v26 = (char *)Partition + 2816;
do
{
MiInitializePfnListHead((INT64)v26, 3i64);
v26 = (char *)(v27 + 40);
}
while( v28 != 1 );
v29 = (_KEVENT *)((char *)Partition + 4408);
v30 = (char *)Partition + 3456;
do
{
MiInitializePfnListHead((INT64)v30, 3i64);
KeInitializeEvent(v29, SynchronizationEvent, 0);
v30 += 40;
++v29;
--v23;
}
while( v23 );
MiInitializePfnListHead((INT64)Partition + 4096, 5i64);
si128 = _mm_load_si128((const __m128i *)&_xmm_fffffffefffffffefffffffefffffffe);
*((_QWORD *)Partition + 532) = v32;
*((_QWORD *)Partition + 530) = (char *)Partition + 7488;
*((_QWORD *)Partition + 531) = (char *)Partition + 7552;
*(__m128i *)((char *)Partition + 4792) = si128;
*(__m128i *)((char *)Partition + 4808) = si128;
KeInitializeEvent((_KEVENT *)((char *)Partition + 6272), NotificationEvent, 0);
v33 = (_KEVENT *)((char *)Partition + 4936);
do
{
KeInitializeEvent(v33, NotificationEvent, 1u);
v33 = (_KEVENT *)((char *)v33 + 32);
--v25;
}
while( v25 );
*((_QWORD *)Partition + 24) = 0i64;
KeInitializeEvent((_KEVENT *)((char *)Partition + 208), NotificationEvent, 0);
memset64((char *)Partition + 248, (unsigned __int64)Partition + 208, 0xBui64);
*((_QWORD *)Partition + 858) = (char *)Partition + 6856;
*((_QWORD *)Partition + 857) = (char *)Partition + 6856;
KeInitializeEvent((_KEVENT *)Partition + 33, SynchronizationEvent, 0);
KeInitializeEvent((_KEVENT *)((char *)Partition + 736), SynchronizationEvent, 0);
KeInitializeEvent((_KEVENT *)((char *)Partition + 760), NotificationEvent, 0);
*((_DWORD *)Partition + 180) = 18;
KeInitializeEvent((_KEVENT *)Partition + 29, NotificationEvent, 0);
KeInitializeEvent((_KEVENT *)((char *)Partition + 880), NotificationEvent, 0);
KeInitializeEvent((_KEVENT *)Partition + 42, NotificationEvent, 0);
KeInitializeGate((_KGATE *)Partition + 27, v34);
*((_QWORD *)Partition + 80) = (char *)Partition + 632;
*((_QWORD *)Partition + 79) = (char *)Partition + 632;
KeInitializeEvent((_KEVENT *)((char *)Partition + 920), SynchronizationEvent, 0);
*((_QWORD *)Partition + 114) = (char *)Partition + 904;
*((_QWORD *)Partition + 113) = (char *)Partition + 904;
if( Partition != (_MI_PARTITION *)&MiSystemPartition )
MiInitializeCommitment(Partition);
MiInitializeNuma((UINT64 *)Partition);
*((_DWORD *)Partition + 289) = -1;
*((_QWORD *)Partition + 138) = MiContractWsSwapPageFileWorker;
*((_QWORD *)Partition + 141) = 0i64;
*((_QWORD *)Partition + 139) = Partition;
*((_QWORD *)Partition + 136) = 0i64;
KeInitializeEvent((_KEVENT *)Partition + 50, NotificationEvent, 0);
KeInitializeEvent((_KEVENT *)Partition + 52, NotificationEvent, 0);
InitializeSListHead((_SLIST_HEADER *)((char *)Partition + 1232));
MiInitializeSections((INT64)Partition);
MiInitializeCombining(Partition, (_MI_PAGE_COMBINING_SUPPORT *)((char *)Partition + 6448));
*((_QWORD *)Partition + 169) = 1i64;
*((_QWORD *)Partition + 170) = 1i64;
*((_QWORD *)Partition + 171) = 1i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 243);
ExAcquirePushLockExclusiveEx((UINT64)&qword_140C4E348, 0i64);
*((_DWORD *)Partition + 1) |= 2u;
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140C4E348, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&qword_140C4E348);
KeAbPostRelease(&qword_140C4E348);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
}Referenced by:
MiCreatePfnDatabase