PspWow64InitThread

NTSTATUS __stdcall PspWow64InitThread(ULONG_PTR BugCheckParameter1){
  __int64 v1; 
  _QWORD *v2; 
  __int64 v3; 
  _QWORD *v4; 
  __int64 v5; 
  _EPROCESS *v6; 
  NTSTATUS v7; 
  __int64 v8; 
  unsigned __int16 v9; 
  unsigned int v10; 
  __int64 v11; 
  INT64 v12; 
  unsigned __int16 ProcessNtdllType; 
  INT64 GuestParam1; 
  INT64 GuestParam2; 
  _DWORD *v16; 
  UINT64 ContextAlign; 
  int v19; 
  _DWORD *v20; 
  __int64 v21; 
  _KAPC_STATE ApcState; 

  v21 = v3;
  v4 = v2;
  v5 = v1;
  v6 = *(_EPROCESS **)&BugCheckParameter1;
  memset(&ApcState, 0, sizeof(ApcState));
  v7 = 0;
  LODWORD(ContextAlign) = 0;
  v8 = *(_QWORD *)(*(_QWORD *)&BugCheckParameter1 + 1408i64);
  if( !v8 || (v9 = *(_WORD *)(v8 + 8)) == 0 )
    v9 = -31132;
  v10 = RtlpArchContextFlagFromMachine(v9);
  if( !v10 )
    return -1073741811;
  RtlpGetLegacyContextLength(v10, 0i64, &ContextAlign);
  v20 = *(_DWORD **)(v5 + 16);
  v11 = ~((unsigned int)ContextAlign - 1i64) & ((unsigned __int64)v20 + (unsigned int)ContextAlign + 3);
  ContextAlign = *(_QWORD *)(v5 + 40);
  v12 = v4[31];
  if( v12 == PspUserThreadStart )
  {
    ProcessNtdllType = PsWow64GetProcessNtdllType((INT64)v6);
    v12 = *((_QWORD *)PspWow64GetSharedInformation(ProcessNtdllType) + 4);
  }
  GuestParam1 = v4[16];
  GuestParam2 = v4[17];
  KiStackAttachProcess(v6, 0i64, &ApcState);
  v16 = v20;
  *(_QWORD *)(v21 + 5256) = v20;
  *v16 = v9 << 16;
  switch( v9 )
  {
    case 0x14Cu:
      PspWow64InitThreadGuestx86(v6, (_X86_NT5_CONTEXT *)v11, v12, ContextAlign, GuestParam1, GuestParam2);
      break;
    case 0x1C4u:
      PspWow64InitThreadGuestArm((__int64)v6, (_DWORD *)v11, v12, ContextAlign, GuestParam1, GuestParam2);
      break;
    case 0x8664u:
      memset((VOID *)v11, 0i64, 0x4D0u);
      *(_QWORD *)(v11 + 152) = ContextAlign;
      *(_QWORD *)(v11 + 248) = v12;
      *(_QWORD *)(v11 + 128) = GuestParam1;
      *(_QWORD *)(v11 + 136) = GuestParam2;
      *(_DWORD *)(v11 + 48) = 1048607;
      break;
    default:
      v7 = -1073741811;
      v19 = -1073741811;
      break;
  }
  KiUnstackDetachProcess(&ApcState, 0i64);
  return v7;
}

Referenced by:

PspAllocateThread