ViFaultsAddAppNoDuplicates

NTSTATUS __stdcall ViFaultsAddAppNoDuplicates(PWCHAR ImageName, UINT64 NameLength){
  UINT64 v2; 
  NTSTATUS v4; 
  VOID *PoolWithTag; 
  _UNICODE_STRING *v6; 
  WCHAR v7; 
  UINT64 v8; 
  unsigned __int8 v9; 
  unsigned __int64 v10; 
  _UNICODE_STRING **v11; 
  v2 = 2 * NameLength;
  v4 = 0;
  PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 2 * NameLength + 34, 0x41466656ui64);
  v6 = (_UNICODE_STRING *)PoolWithTag;
  if( !PoolWithTag )
    return -1073741670;
  memmove((UINT8 *)PoolWithTag + 32, (UINT8 *)ImageName, v2);
  *(unsigned __int16 *)((char *)&v6[2].Length + v2) = 0;
  RtlInitUnicodeString(v6 + 1, &v6[2].Length, v7);
  RtlUpcaseUnicodeString(v6 + 1, v6 + 1, 0);
  KeAcquireSpinLockRaiseToDpc(&ViFaultInjectionLock, v8);
  v10 = v9;
  if( (unsigned int)ViFaultsIsAppTarget(v6 + 1) )
  {
    ExFreePoolWithTag(v6, 0);
  }
  else
  {
    v11 = (_UNICODE_STRING **)qword_140C1C9A8;
    if( *(PVOID **)qword_140C1C9A8 != &ViFaultApplicationsList )
      __fastfail(3u);
    *(_QWORD *)&v6->Length = &ViFaultApplicationsList;
    v6->Buffer = (wchar_t *)v11;
    *v11 = v6;
    qword_140C1C9A8 = (__int64)v6;
  }
  KxReleaseSpinLock(&ViFaultInjectionLock);
  __writecr8(v10);
  return v4;
}

Referenced by:

ViFaultsAddAllApps