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