MmCreateTeb

__int64 __fastcall MmCreateTeb(PVOID Process, __int64 a2, _QWORD *a3, VOID **a4, __int64 a5){
  unsigned int v9; 
  __int64 v10; 
  __int64 *v11; 
  NTSTATUS v12; 
  _QWORD *v13; 
  char *v14; 
  __int16 v16; 
  VOID *Base; 
  _QWORD *v18; 
  __int64 v19; 
  _KAPC_STATE ApcState; 

  v18 = Process;
  v19 = a5;
  Base = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  v9 = 3;
  v10 = 0i64;
  v11 = (__int64 *)*((_QWORD *)Process + 176);
  if( v11 )
    v10 = *v11;
  if( v10 )
  {
    if( v11 && ((v16 = *((_WORD *)v11 + 4), v16 == 332) || v16 == 452) )
      v9 = 4;
    else
      v9 = 5;
  }
  KiStackAttachProcess(Process, 0i64, &ApcState);
  v12 = MiCreatePebOrTeb(v9, a4, &Base);
  if( v12 < 0 )
  {
    KiUnstackDetachProcess(&ApcState, 0i64);
    return(unsigned int)v12;
  }
  v13 = Base;
  *((_DWORD *)Base + 8) = 7680;
  v13[6] = v13;
  v13[9] = a3[1];
  v13[8] = *a3;
  *((_DWORD *)v13 + 186) = 65534;
  v13[252] = a3[1];
  v13[251] = *a3;
  *((_WORD *)v13 + 2349) = 522;
  v13[588] = v13 + 589;
  v13[12] = v18[170];
  v13[1] = *(_QWORD *)(a2 + 16);
  v13[2] = *(_QWORD *)(a2 + 24);
  v13[655] = *(_QWORD *)(a2 + 32);
  v13[746] = BBTBuffer;
  if( v9 == 4 )
  {
    v14 = (char *)(v13 + 1024);
    v18 = v13 + 1024;
    *((_DWORD *)v13 + 2052) = 7680;
    *((_DWORD *)v13 + 2054) = (_DWORD)v13 + 0x2000;
    *((_DWORD *)v13 + 2057) = *((_DWORD *)a3 + 2);
    *((_DWORD *)v13 + 2056) = *(_DWORD *)a3;
    *((_DWORD *)v13 + 2164) = 65534;
    *((_DWORD *)v13 + 2478) = *((_DWORD *)a3 + 2);
    *((_DWORD *)v13 + 2477) = *(_DWORD *)a3;
    *((_WORD *)v13 + 5629) = 522;
    *((_DWORD *)v13 + 2815) = (_DWORD)v13 + 11264;
    *((_DWORD *)v13 + 2048) = -1;
    *((_DWORD *)v13 + 2060) = v10;
    *((_DWORD *)v13 + 3036) = (_DWORD)v13;
    *((_DWORD *)v13 + 3014) = *((_DWORD *)v13 + 1444);
    *((_DWORD *)v13 + 2049) = *(_DWORD *)(a2 + 40);
    *((_DWORD *)v13 + 2050) = *(_DWORD *)(a2 + 48);
    *((_DWORD *)v13 + 2947) = *(_DWORD *)(a2 + 56);
    *((_DWORD *)v13 + 1539) = 0x2000;
    *((_DWORD *)v13 + 3063) = -8192;
    goto LABEL_9;
  }
  if( v9 == 5 )
  {
    v14 = (char *)(v13 + 1024);
    *((_DWORD *)v13 + 2056) = 7680;
    v13[1030] = v13 + 1024;
    v13[1033] = a3[1];
    v13[1032] = *a3;
    *((_DWORD *)v13 + 2234) = 65534;
    v13[1276] = a3[1];
    v13[1275] = *a3;
    *((_WORD *)v13 + 6445) = 522;
    v13[1612] = v13 + 1613;
    v13[1036] = v10;
    *((_DWORD *)v13 + 3536) = 0;
    v13[1746] = v13[722];
    v13[1025] = *(_QWORD *)(a2 + 40);
    v13[1026] = *(_QWORD *)(a2 + 48);
    v13[1679] = *(_QWORD *)(a2 + 56);
    *((_DWORD *)v13 + 1539) = 0x2000;
    *((_DWORD *)v13 + 3587) = -8192;
LABEL_9:
    *v13 = v14;
  }
  KiUnstackDetachProcess(&ApcState, 0i64);
  *(_QWORD *)a5 = v13;
  return(unsigned int)v12;
}

Referenced by:

PspAllocateThread