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