EtwpProfileInterrupt

VOID __stdcall EtwpProfileInterrupt(_KTRAP_FRAME *TrapFrame, VOID *Context){
  _ETHREAD *CurrentThread; 
  unsigned __int64 Rip; 
  int v4; 
  int UniqueThread; 
  _EPROCESS *Process; 
  char v7; 
  struct _KPRCB *CurrentPrcb; 
  unsigned __int8 NestingLevel; 
  char v10; 
  _KSCHEDULING_GROUP *volatile SchedulingGroup; 
  char *v12; 
  INT64 v13; 
  unsigned __int64 v14; 
  int v15; 
  __int16 v16; 
  char v17; 
  char v18; 
  PGET_UPDATED_BUS_RESOURCE v19; 
  int v20; 
  int v21; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  Rip = TrapFrame->_Rip;
  v4 = 34656770;
  UniqueThread = (int)CurrentThread->Cid.UniqueThread;
  if( Rip > 0x7FFFFFFEFFFFi64 )
    v4 = 34658818;
  Process = CurrentThread->Tcb.Process;
  v17 = 0;
  v15 = UniqueThread;
  v7 = 8 * CurrentThread->Tcb.Priority;
  v17 = v7;
  v14 = Rip;
  v16 = 1;
  CurrentPrcb = KeGetCurrentPrcb();
  NestingLevel = CurrentPrcb->NestingLevel;
  if( NestingLevel != 2 )
  {
    if( NestingLevel <= 1u )
      goto LABEL_9;
    goto LABEL_7;
  }
  if( (KeGetPcr()->Prcb._bf_0 & 0x10001) == 0 )
  {
LABEL_7:
    v10 = v7 | 2;
    goto LABEL_8;
  }
  v10 = v7 | 1;
LABEL_8:
  v4 &= ~0x4000u;
  v17 = v10;
LABEL_9:
  SchedulingGroup = CurrentThread->Tcb.SchedulingGroup;
  if( SchedulingGroup )
  {
    v12 = (char *)SchedulingGroup + CurrentPrcb->ScbOffset;
    do
    {
      if( *((_DWORD *)v12 + 29) > 0xFFu )
        LOBYTE(SchedulingGroup) = -1;
      else
        LOBYTE(SchedulingGroup) = v12[116];
      if( (_BYTE)SchedulingGroup )
        break;
      v12 = (char *)*((_QWORD *)v12 + 51);
    }
    while( v12 );
  }
  v21 = 0;
  v19 = (PGET_UPDATED_BUS_RESOURCE)&v14;
  v18 = (char)SchedulingGroup;
  LODWORD(v13) = v4;
  v20 = 16;
  EtwTraceSiloKernelEvent((INT64)Process->ServerSilo, &v19, 1ui64, 0x20000002ui64, 3886, v13);
}

Referenced by:

No references.