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