ViFaultsAddTagNoDuplicates

NTSTATUS __stdcall ViFaultsAddTagNoDuplicates(WCHAR *Tag, UINT64 TagLength){
  NTSTATUS v2; 
  UINT64 i; 
  char v5; 
  VOID **PoolWithTag; 
  VOID **v7; 
  unsigned int v8; 
  unsigned __int64 v9; 
  VOID ***v10; 
  UINT64 Taga; 

  v2 = 0;
  if( TagLength > 4 )
    return -1073741811;
  for( i = 0i64; i < 4; ++i )
  {
    v5 = 32;
    if( i < TagLength )
      v5 = Tag[i];
    *((_BYTE *)&Taga + i) = v5;
  }
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x18ui64, 1413899862i64);
  v7 = PoolWithTag;
  if( !PoolWithTag )
    return -1073741670;
  v8 = Taga;
  *((_DWORD *)PoolWithTag + 4) = Taga;
  v9 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(&ViFaultInjectionLock);
  if( (unsigned int)ViFaultsIsTagPresentInList(v8) )
  {
    ExFreePoolWithTag(v7, 0);
  }
  else
  {
    v10 = (VOID ***)qword_140C1C988;
    ViHaveFaultTags = 1;
    if( *(PVOID **)qword_140C1C988 != &ViFaultTagsList )
      __fastfail(3u);
    *v7 = &ViFaultTagsList;
    v7[1] = v10;
    *v10 = v7;
    qword_140C1C988 = (__int64)v7;
  }
  KxReleaseSpinLock(&ViFaultInjectionLock);
  __writecr8(v9);
  return v2;
}

Referenced by:

ViFaultsAddAllTags