PspCallThreadNotifyRoutines

VOID __stdcall PspCallThreadNotifyRoutines(_ETHREAD *Thread, UINT8 Create, UINT8 ExNotify){
  bool v5; 
  INT64 *v6; 
  __int64 v7; 
  struct EX_RUNDOWN_REF *v8; 
  struct EX_RUNDOWN_REF *v9; 
  int Count; 
  INT64 *v11; 
  __int64 v12; 
  struct EX_RUNDOWN_REF *v13; 
  EX_RUNDOWN_REF *v14; 
  INT64 *v15; 
  __int64 v16; 
  struct EX_RUNDOWN_REF *v17; 
  EX_RUNDOWN_REF *v18; 
  v5 = *((_QWORD *)Thread + 188) != 0i64;
  if( Create )
  {
    if( ExNotify )
    {
      if( (PspNotifyEnableMask & 0x10) != 0 )
      {
        v11 = &PspCreateThreadNotifyRoutine;
        v12 = 64i64;
        do
        {
          v13 = ExReferenceCallBackBlock(v11);
          v14 = v13;
          if( v13 )
          {
            if( (v13[2].Count & 1) != 0 )
              ((void(__fastcall *)(_QWORD, _QWORD, _QWORD))v13[1].Count)(
                *(_QWORD *)(*((_QWORD *)Thread + 68) + 1088i64),
                *((_QWORD *)Thread + 144),
                Create);
            ExDereferenceCallBackBlock(v11, v14);
          }
          ++v11;
          --v12;
        }
        while( v12 );
      }
    }
    else if( (PspNotifyEnableMask & 8) != 0 )
    {
      v6 = &PspCreateThreadNotifyRoutine;
      v7 = 64i64;
      do
      {
        v8 = ExReferenceCallBackBlock(v6);
        v9 = v8;
        if( v8 )
        {
          Count = v8[2].Count;
          if( (Count & 1) == 0 && (!v5 || (Count & 2) != 0) )
            ((void(__fastcall *)(_QWORD, _QWORD, _QWORD))v9[1].Count)(
              *(_QWORD *)(*((_QWORD *)Thread + 68) + 1088i64),
              *((_QWORD *)Thread + 144),
              Create);
          ExDereferenceCallBackBlock(v6, v9);
        }
        ++v6;
        --v7;
      }
      while( v7 );
    }
  }
  else if( (PspNotifyEnableMask & 0x10) != 0 || (PspNotifyEnableMask & 8) != 0 )
  {
    v15 = &PspCreateThreadNotifyRoutine;
    v16 = 64i64;
    do
    {
      v17 = ExReferenceCallBackBlock(v15);
      v18 = v17;
      if( v17 )
      {
        if( !v5 || (v17[2].Count & 2) != 0 )
          ((void(__fastcall *)(_QWORD, _QWORD, _QWORD))v17[1].Count)(
            *(_QWORD *)(*((_QWORD *)Thread + 68) + 1088i64),
            *((_QWORD *)Thread + 144),
            0i64);
        ExDereferenceCallBackBlock(v15, v18);
      }
      ++v15;
      --v16;
    }
    while( v16 );
  }
}

Referenced by:

PspExitThread
PspInitializeThunkContext
PspInsertThread