PoGetRequester

NTSTATUS __fastcall PoGetRequester(){
  VOID *v0; 
  char v1; 
  __int64 v2; 
  NTSTATUS result; 
  _ETHREAD *CurrentThread; 
  _QWORD *Teb; 
  __int64 v6; 
  _EWOW64PROCESS *WoW64Process; 
  unsigned __int16 Machine; 
  __int64 v9; 

  result = (int)v0;
  if( v1 )
  {
    v9 = 0i64;
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    if( (CurrentThread->Tcb._bf_0 & 0x400) != 0 || CurrentThread->Tcb.ApcStateIndex == 1 )
      Teb = 0i64;
    else
      Teb = CurrentThread->Tcb.Teb;
    if( Teb )
    {
      if( KeGetCurrentThread()->ApcState.Process->WoW64Process
        && (WoW64Process = KeGetCurrentThread()->ApcState.Process->WoW64Process) != 0i64
        && ((Machine = WoW64Process->Machine, Machine == 332) || Machine == 452) )
      {
        v6 = *((unsigned int *)Teb + 3032);
      }
      else
      {
        v6 = Teb[740];
      }
      v9 = v6;
    }
    *(_DWORD *)v2 = (v9 != 0) + 1;
    *(_QWORD *)(v2 + 8) = KeGetCurrentThread()->ApcState.Process;
    result = v9;
    *(_DWORD *)(v2 + 16) = v9;
  }
  else
  {
    *(_DWORD *)v2 = 0;
    *(_QWORD *)(v2 + 8) = v0;
    if( v0 )
      return ObfReferenceObjectWithTag(v0, 0x67446F50ui64);
  }
  return result;
}

Referenced by:

PoCaptureReasonContext