MmCreateTeb

__int64 __fastcall MmCreateTeb(ULONG_PTR BugCheckParameter1, __int64 a2, _QWORD *a3, __int64 a4, __int64 a5){
  unsigned int v9; 
  __int64 v10; 
  __int64 *v11; 
  NTSTATUS PebOrTeb; 
  __int16 v14; 
  _KAPC_STATE ApcState; 
  memset(&ApcState, 0, sizeof(ApcState));
  v9 = 3;
  v10 = 0i64;
  v11 = *(__int64 **)(BugCheckParameter1 + 1408);
  if( v11 )
    v10 = *v11;
  if( v10 )
  {
    if( v11 && ((v14 = *((_WORD *)v11 + 4), v14 == 332) || v14 == 452) )
      v9 = 4;
    else
      v9 = 5;
  }
  KiStackAttachProcess((_KPROCESS *)BugCheckParameter1, 0i64, &ApcState);
  PebOrTeb = MiCreatePebOrTeb(v9, (PVOID *)a4);
  if( PebOrTeb < 0 )
  {
    KiUnstackDetachProcess(&ApcState, 0i64);
    return(unsigned int)PebOrTeb;
  }
  MEMORY[0x20] = 7680;
  MEMORY[0x30] = 0i64;
  MEMORY[0x48] = a3[1];
  MEMORY[0x40] = *a3;
  MEMORY[0x2E8] = 65534;
  MEMORY[0x7E0] = a3[1];
  MEMORY[0x7D8] = *a3;
  MEMORY[0x125A] = 522;
  MEMORY[0x1260] = 4712i64;
  MEMORY[0x60] = *(_QWORD *)(BugCheckParameter1 + 1360);
  MEMORY[8] = *(_QWORD *)(a2 + 16);
  MEMORY[0x10] = *(_QWORD *)(a2 + 24);
  MEMORY[0x1478] = *(_QWORD *)(a2 + 32);
  MEMORY[0x1750] = BBTBuffer;
  if( v9 == 4 )
  {
    MEMORY[0x2010] = 7680;
    MEMORY[0x2018] = 0x2000;
    MEMORY[0x2024] = *((_DWORD *)a3 + 2);
    MEMORY[0x2020] = *(_DWORD *)a3;
    MEMORY[0x21D0] = 65534;
    MEMORY[0x26B8] = *((_DWORD *)a3 + 2);
    MEMORY[0x26B4] = *(_DWORD *)a3;
    MEMORY[0x2BFA] = 522;
    MEMORY[0x2BFC] = 11264;
    MEMORY[0x2000] = -1;
    MEMORY[0x2030] = v10;
    MEMORY[0x2F70] = 0;
    MEMORY[0x2F18] = MEMORY[0x1690];
    MEMORY[0x2004] = *(_DWORD *)(a2 + 40);
    MEMORY[0x2008] = *(_DWORD *)(a2 + 48);
    MEMORY[0x2E0C] = *(_DWORD *)(a2 + 56);
    MEMORY[0x180C] = 0x2000;
    MEMORY[0x2FDC] = -8192;
    goto LABEL_9;
  }
  if( v9 == 5 )
  {
    MEMORY[0x2020] = 7680;
    MEMORY[0x2030] = 0x2000i64;
    MEMORY[0x2048] = a3[1];
    MEMORY[0x2040] = *a3;
    MEMORY[0x22E8] = 65534;
    MEMORY[0x27E0] = a3[1];
    MEMORY[0x27D8] = *a3;
    MEMORY[0x325A] = 522;
    MEMORY[0x3260] = 12904i64;
    MEMORY[0x2060] = v10;
    MEMORY[0x3740] = 0;
    MEMORY[0x3690] = MEMORY[0x1690];
    MEMORY[0x2008] = *(_QWORD *)(a2 + 40);
    MEMORY[0x2010] = *(_QWORD *)(a2 + 48);
    MEMORY[0x3478] = *(_QWORD *)(a2 + 56);
    MEMORY[0x180C] = 0x2000;
    MEMORY[0x380C] = -8192;
LABEL_9:
    MEMORY[0] = 0x2000i64;
  }
  KiUnstackDetachProcess(&ApcState, 0i64);
  *(_QWORD *)a5 = 0i64;
  return(unsigned int)PebOrTeb;
}

Referenced by:

PspAllocateThread