EtwpPsProvTraceProcess

VOID __stdcall EtwpPsProvTraceProcess(
        PEPROCESS Process,
        UINT64 ProcessInfoFlags,
        _ETW_PACKAGE_IDENTITY *PackageInfo,
        _ETW_OTHER_PROCESS_INFO *OtherInfo,
        UINT16 HookId){
  char v6; 
  const _EVENT_DESCRIPTOR *v9; 
  ULONG v10; 
  void *InheritedFromUniqueProcessId; 
  int v12; 
  VOID *v13; 
  int v14; 
  _OBJECT_NAME_INFORMATION *p_DestinationString; 
  __int64 *v16; 
  unsigned int v17; 
  int v18; 
  VOID *v19; 
  int ReadOperationCount; 
  int WriteOperationCount; 
  __int64 v22; 
  int WriteTransferCount; 
  unsigned int *p_HardFaultCount; 
  unsigned __int8 *ImageFileName; 
  __int64 v26; 
  int v27; 
  int v28; 
  int ProcessHandleCount; 
  int v30; 
  int v31; 
  int v32; 
  int v33; 
  int v34; 
  NTSTATUS SessionId; 
  int v36; 
  __int64 v37; 
  volatile unsigned __int64 CommitCharge; 
  volatile unsigned __int64 CommitChargePeak; 
  __int64 v40; 
  PVOID v41; 
  PVOID v42; 
  _EPROCESS *Processa; 
  unsigned __int64 SequenceNumber; 
  VOID *TokenInformation; 
  PVOID P; 
  _SID_AND_ATTRIBUTES IntegritySA; 
  _UNICODE_STRING DestinationString; 
  _EPROCESS_VALUES Values; 
  _EVENT_DATA_DESCRIPTOR UserData; 
  unsigned __int64 *p_SequenceNumber; 
  __int64 v52; 
  _LARGE_INTEGER *p_CreateTime; 
  __int64 v54; 
  _LARGE_INTEGER *p_ExitTime; 
  __int64 v56; 
  int *p_ExitStatus; 
  __int64 v58; 
  NTSTATUS *p_SessionId; 
  __int64 v60; 
  int *p_ProcessHandleCount; 
  __int64 v62; 
  volatile unsigned __int64 *p_CommitCharge; 
  __int64 v64; 
  volatile unsigned __int64 *p_CommitChargePeak; 
  __int64 v66; 
  void *p_CycleTime; 
  __int64 v68; 
  int *v69; 
  __int64 v70; 
  __int64 *v71; 
  __int64 v72; 
  _ETW_OTHER_PROCESS_INFO *v73; 
  __int64 v74; 
  unsigned int *p_TimeDateStamp; 
  __int64 v76; 
  wchar_t *v77; 
  __int64 PackageNameSize; 
  wchar_t *v79; 
  int v80; 
  int v81; 
  WCHAR pszDest[16]; 

  v6 = ProcessInfoFlags;
  v28 = 0;
  v34 = 0;
  SessionId = 0;
  v27 = 0;
  ProcessHandleCount = 0;
  CommitCharge = 0i64;
  CommitChargePeak = 0i64;
  memset(&Values, 0i64, sizeof(Values));
  v30 = 0;
  v31 = 0;
  v32 = 0;
  v33 = 0;
  DestinationString = 0i64;
  switch( HookId )
  {
    case 0x301u:
      v9 = &ProcessStart;
      goto LABEL_3;
    case 0x302u:
      v9 = (const _EVENT_DESCRIPTOR *)ProcessStop;
      goto LABEL_3;
    case 0x303u:
      v9 = (const _EVENT_DESCRIPTOR *)ProcessRundown;
LABEL_3:
      LODWORD(v40) = Process->UniqueProcessId;
      v10 = 3;
      *(_QWORD *)&UserData.Size = 4i64;
      UserData.Ptr = (unsigned __int64)&v40;
      p_SequenceNumber = &Process->SequenceNumber;
      p_CreateTime = &Process->CreateTime;
      v52 = 8i64;
      v54 = 8i64;
      if( ((HookId - 769) & 0xFFFD) != 0 )
      {
        if( HookId != 770 )
          goto LABEL_24;
        v41 = 0i64;
        PsQueryStatisticsProcess(Process, &Values);
        v56 = 8i64;
        p_ExitTime = &Process->ExitTime;
        v58 = 4i64;
        p_ExitStatus = &Process->ExitStatus;
        v19 = PsReferencePrimaryToken(Process);
        if( SeQueryInformationToken(v19, TokenElevationType, &v41) >= 0 )
        {
          if( *(_DWORD *)v41 == 1 )
          {
            v42 = 0i64;
            if( SeQueryInformationToken(v19, TokenElevation, &v42) >= 0 )
              v27 = *(_DWORD *)v42 != 0 ? 1 : 4;
            if( v42 )
              ExFreePoolWithTag(v42, 0);
          }
          else
          {
            v27 = *(_DWORD *)v41;
          }
        }
        ObFastDereferenceObject(&Process->Token, v19);
        if( v41 )
          ExFreePoolWithTag(v41, 0);
        v60 = 4i64;
        p_SessionId = &v27;
        ProcessHandleCount = ObGetProcessHandleCount((_EX_RUNDOWN_REF *)Process, 0i64);
        v62 = 4i64;
        p_ProcessHandleCount = &ProcessHandleCount;
        CommitCharge = Process->CommitCharge;
        CommitCharge <<= 12;
        p_CommitCharge = &CommitCharge;
        CommitChargePeak = Process->CommitChargePeak;
        CommitChargePeak <<= 12;
        p_CommitChargePeak = &CommitChargePeak;
        p_CycleTime = &Values.CycleTime;
        ReadOperationCount = Values.ReadOperationCount;
        if( HIDWORD(Values.ReadOperationCount) )
          ReadOperationCount = -1;
        v64 = 8i64;
        v30 = ReadOperationCount;
        v69 = &v30;
        WriteOperationCount = Values.WriteOperationCount;
        if( HIDWORD(Values.WriteOperationCount) )
          WriteOperationCount = -1;
        v66 = 8i64;
        v31 = WriteOperationCount;
        v22 = Values.ReadTransferCount >> 10;
        v71 = (__int64 *)&v31;
        Values.ReadTransferCount = v22;
        v68 = 8i64;
        if( HIDWORD(v22) )
          LODWORD(v22) = -1;
        v73 = (_ETW_OTHER_PROCESS_INFO *)&v32;
        v32 = v22;
        Values.WriteTransferCount >>= 10;
        WriteTransferCount = Values.WriteTransferCount;
        v70 = 4i64;
        v72 = 4i64;
        if( HIDWORD(Values.WriteTransferCount) )
          WriteTransferCount = -1;
        p_TimeDateStamp = (unsigned int *)&v33;
        p_HardFaultCount = &Process->Vm.Instance.HardFaultCount;
        v74 = 4i64;
        ImageFileName = Process->ImageFileName;
        v77 = (wchar_t *)p_HardFaultCount;
        v79 = (wchar_t *)ImageFileName;
        v26 = -1i64;
        v33 = WriteTransferCount;
        v76 = 4i64;
        PackageNameSize = 4i64;
        do
          ++v26;
        while( ImageFileName[v26] );
        v18 = v26 + 1;
      }
      else
      {
        InheritedFromUniqueProcessId = Process->InheritedFromUniqueProcessId;
        SequenceNumber = -1i64;
        v36 = -1;
        v34 = (int)Process->InheritedFromUniqueProcessId;
        LODWORD(v37) = -1;
        p_ExitTime = (_LARGE_INTEGER *)&v34;
        Processa = 0i64;
        TokenInformation = 0i64;
        P = 0i64;
        IntegritySA = 0i64;
        v56 = 4i64;
        if( PsLookupProcessByProcessId(InheritedFromUniqueProcessId, &Processa) >= 0 )
        {
          SequenceNumber = Processa->SequenceNumber;
          HalPutDmaAdapter((PADAPTER_OBJECT)Processa);
        }
        v58 = 8i64;
        p_ExitStatus = (int *)&SequenceNumber;
        SessionId = MmGetSessionId(Process);
        v12 = 1;
        v60 = 4i64;
        p_SessionId = &SessionId;
        if( (v6 & 1) == 0 )
        {
          v10 = 2;
          v12 = v28;
        }
        v62 = 4i64;
        if( (v6 & 8) != 0 )
          v12 = v10;
        p_ProcessHandleCount = &v28;
        v28 = v12;
        v13 = PsReferencePrimaryToken(Process);
        if( SeQueryInformationToken(v13, TokenElevationType, &TokenInformation) >= 0 )
          v36 = *(_DWORD *)TokenInformation;
        v64 = 4i64;
        p_CommitCharge = (volatile unsigned __int64 *)&v36;
        if( TokenInformation )
          ExFreePoolWithTag(TokenInformation, 0);
        if( SeQueryInformationToken(v13, TokenElevation, &P) >= 0 )
          LODWORD(v37) = *(_DWORD *)P;
        v66 = 4i64;
        p_CommitChargePeak = (volatile unsigned __int64 *)&v37;
        if( P )
          ExFreePoolWithTag(P, 0);
        SeQueryTokenIntegrity(v13, &IntegritySA);
        v14 = *((unsigned __int8 *)IntegritySA.Sid + 1);
        p_CycleTime = IntegritySA.Sid;
        v68 = (unsigned int)(4 * v14 + 8);
        ObFastDereferenceObject(&Process->Token, v13);
        p_DestinationString = Process->SeAuditProcessCreationInfo.ImageFileName;
        if( !p_DestinationString || !*(_WORD *)p_DestinationString )
        {
          RtlStringCchPrintfW(pszDest, 0xFui64, (WCHAR *)L"%S");
          RtlInitUnicodeString(&DestinationString, pszDest);
          p_DestinationString = (_OBJECT_NAME_INFORMATION *)&DestinationString;
        }
        v16 = &EmptyUnicodeString;
        if( p_DestinationString )
          v16 = (__int64 *)p_DestinationString;
        v17 = *(unsigned __int16 *)v16;
        v69 = (int *)v16[1];
        v71 = &EtwpNull;
        p_TimeDateStamp = &OtherInfo->TimeDateStamp;
        v77 = &PackageInfo->PackageName[4];
        PackageNameSize = PackageInfo->PackageNameSize;
        v79 = &PackageInfo->ApplicationName[4];
        v18 = *(_DWORD *)PackageInfo->PackageName;
        v70 = v17;
        v72 = 2i64;
        v73 = OtherInfo;
        v74 = 4i64;
        v76 = 4i64;
      }
      v10 = 16;
      v81 = 0;
      v80 = v18;
LABEL_24:
      EtwWrite(*(&ExBootDevicesRemovedEvent + 245), v9, 0, v10, &UserData);
      break;
  }
}

Referenced by:

EtwpPsProvProcessEnumCallback
EtwpWriteProcessEvent