PspQueryLastCallThread

INT64 __stdcall PspQueryLastCallThread(
        _ETHREAD *Thread,
        PVOID ThreadInformation,
        UINT64 ThreadInformationLength,
        UINT64 *ReturnLength){
  int v5; 
  __int64 v6; 
  __int16 v7; 
  unsigned __int64 v8; 
  int v9; 
  signed __int32 v10[4]; 
  __int64 v11; 
  if( (((_DWORD)ThreadInformationLength - 16) & 0xFFFFFFF7) != 0 )
    return 3221225476i64;
  if( Thread == (_ETHREAD *)KeGetCurrentThread() )
    return 3221225485i64;
  v5 = *((_DWORD *)Thread + 85);
  _InterlockedOr(v10, 0);
  if( *((_BYTE *)Thread + 388) != 5 )
    return 3221225473i64;
  if( *((_BYTE *)Thread + 562) != 1 )
    return 3221225473i64;
  v6 = *((_QWORD *)Thread + 17);
  v7 = *((_WORD *)Thread + 64);
  v11 = *((unsigned int *)Thread + 109);
  _InterlockedOr(v10, 0);
  if( v5 != *((_DWORD *)Thread + 85) )
    return 3221225473i64;
  v8 = (unsigned int)(KUSER_SHARED_DATA.TickCount.LowPart - v11) * (unsigned __int64)KeMaximumIncrement;
  *(_QWORD *)ThreadInformation = v6;
  *((_WORD *)ThreadInformation + 4) = v7;
  v9 = 16;
  if( (_DWORD)ThreadInformationLength != 16 )
    *((_QWORD *)ThreadInformation + 2) = v8;
  if( ReturnLength )
  {
    if( (_DWORD)ThreadInformationLength != 16 )
      v9 = 24;
    *(_DWORD *)ReturnLength = v9;
  }
  return 0i64;
}

Referenced by:

NtQueryInformationThread