ViCreateProcessCallbackInternal

VOID __stdcall ViCreateProcessCallbackInternal(VOID *ProcessId, UINT8 Create){
  _EPROCESS *v2; 
  _UNICODE_STRING *v3; 
  char v4; 
  _KIRQL v5; 
  _UNICODE_STRING BaseImageName; 
  _EPROCESS *Process; 
  _UNICODE_STRING *ImageName; 

  if( Create )
  {
    Process = 0i64;
    ImageName = 0i64;
    BaseImageName = 0i64;
    if( PsLookupProcessByProcessId(ProcessId, &Process) >= 0 )
    {
      v2 = Process;
      if( PsGetAllocatedFullProcessImageName(Process, &ImageName) >= 0 )
      {
        v3 = ImageName;
        ViFaultsGetBaseImageName(ImageName, &BaseImageName);
        RtlUpcaseUnicodeString(&BaseImageName, &BaseImageName, 0);
        v4 = KeAcquireSpinLockRaiseToDpc(&ViFaultInjectionLock);
        if( (unsigned int)ViFaultsIsAppTarget(&BaseImageName) )
        {
          _InterlockedOr((volatile signed __int32 *)&v2->1120, 0x10000u);
          v2 = Process;
          v3 = ImageName;
        }
        LOBYTE(v5) = v4;
        KeReleaseSpinLock(&ViFaultInjectionLock, v5);
        ExFreePoolWithTag(v3, 0);
      }
      ObfDereferenceObjectWithTag(v2, 0x746C6644ui64);
    }
  }
}

Referenced by:

ViCreateProcessCallback