PspWriteTebIdealProcessor

void __fastcall PspWriteTebIdealProcessor(__int64 a1, __int64 a2){
  __int64 v4; 
  struct _PROCESSOR_NUMBER *v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  char v9; 
  char v10; 
  struct _PROCESSOR_NUMBER *v11; 
  struct _PROCESSOR_NUMBER *i; 
  struct _PROCESSOR_NUMBER v13; 
  __int64 v14; 
  int v15[8]; 
  char v16; 
  char v17; 
  struct _PROCESSOR_NUMBER ProcNumber; 
  struct _PROCESSOR_NUMBER v19; 
  struct _PROCESSOR_NUMBER *v20; 
  __int64 v21; 
  __int64 v22; 
  struct _PROCESSOR_NUMBER *p_ProcNumber; 
  __int64 v24; 
  __int64 v25; 
  _KAPC_STATE ApcState; 
  v25 = a2;
  memset(&ApcState, 0, sizeof(ApcState));
  ProcNumber = 0;
  v19 = 0;
  v4 = 0i64;
  v21 = 0i64;
  v5 = 0i64;
  v22 = 0i64;
  v6 = *(_QWORD *)(a2 + 240);
  v20 = (struct _PROCESSOR_NUMBER *)v6;
  v24 = v6;
  v7 = *(_QWORD *)(a2 + 544);
  p_ProcNumber = &ProcNumber;
  v8 = *(_QWORD *)(v7 + 1408);
  if( v8 )
  {
    v14 = v6 + 0x2000;
    if( *(_WORD *)(v8 + 8) == 0x8664 )
    {
      v5 = (struct _PROCESSOR_NUMBER *)v14;
      v22 = v14;
    }
    else
    {
      v4 = v14;
      v21 = v14;
    }
  }
  v9 = 0;
  v17 = 0;
  if( a2 != a1 )
  {
    if( !ExAcquireRundownProtection((PEX_RUNDOWN_REF)(a2 + 1272)) )
      return;
    v9 = 1;
    v17 = 1;
  }
  v10 = 0;
  v16 = 0;
  if( v7 != *(_QWORD *)(a1 + 184) )
  {
    KiStackAttachProcess((_KPROCESS *)v7, 0i64, &ApcState);
    v10 = 1;
    v16 = 1;
  }
  KeGetProcessorNumberFromIndex(*(_DWORD *)(a2 + 196), &ProcNumber);
  v11 = v20;
  for( i = p_ProcNumber; ; *i = v19 )
  {
    ProcNumber.Reserved = ProcNumber.Number;
    v13 = ProcNumber;
    v11[1489] = ProcNumber;
    if( v5 )
      v5[1489] = v13;
    if( v4 )
    {
      LOWORD(v20) = v13.Group;
      BYTE2(v20) = v13.Number & 0x1F;
      BYTE3(v20) = v13.Reserved & 0x1F;
      *(_DWORD *)(v4 + 3956) = (_DWORD)v20;
    }
    _InterlockedOr(v15, 0);
    KeGetProcessorNumberFromIndex(*(_DWORD *)(a2 + 196), &v19);
    if( v19.Group == ProcNumber.Group && v19.Number == ProcNumber.Number )
      break;
  }
  if( v10 )
    KiUnstackDetachProcess(&ApcState, 0i64);
  if( v9 )
    ExReleaseRundownProtection((PEX_RUNDOWN_REF)(a2 + 1272));
}

Referenced by:

NtSetInformationThread
PspUserThreadStartup