VfXdvExcludeParseRegistryString
VOID __stdcall VfXdvExcludeParseRegistryString(){
__int64 *v0;
__int64 *v1;
__int64 v2;
unsigned __int64 v3;
__int64 *v4;
unsigned __int64 v5;
int v6;
VOID **Entry;
VOID ***v8;
__int128 v9;
v9 = 0i64;
if( VfXdvSuppressDriversBufferLength == -1 )
{
VfXdvSuppressDriversBufferLength = 0;
}
else
{
v0 = VfXdvSuppressDriversBuffer;
v1 = (__int64 *)((char *)VfXdvSuppressDriversBuffer
+ 2 * (((unsigned __int64)(unsigned int)VfXdvSuppressDriversBufferLength - 2) >> 1));
if( VfXdvSuppressDriversBuffer < v1 )
{
v2 = 0x100002601i64;
do
{
v3 = *(unsigned __int16 *)v0;
if( (unsigned int)v3 <= 0x20 && _bittest64(&v2, v3) || (_WORD)v3 == 12288 )
{
v4 = v0;
}
else
{
v4 = (__int64 *)((char *)v0 + 2);
if( (_DWORD)v3 == 34 )
{
v0 = (__int64 *)((char *)v0 + 2);
v4 = (__int64 *)((char *)v4 + 2);
if( v4 >= v1 )
return;
do
{
if( *(_WORD *)v4 == 34 )
break;
v4 = (__int64 *)((char *)v4 + 2);
}
while( v4 < v1 );
if( v4 >= v1 )
return;
}
else
{
while( v4 < v1 )
{
v5 = *(unsigned __int16 *)v4;
if( (unsigned int)v5 <= 0x20 )
{
if( _bittest64(&v2, v5) )
break;
}
if( (_WORD)v5 == 12288 )
break;
v4 = (__int64 *)((char *)v4 + 2);
}
}
v6 = 2 * (((char *)v4 - (char *)v0) >> 1);
if( v6 )
{
LOWORD(v9) = 2 * (((char *)v4 - (char *)v0) >> 1);
WORD1(v9) = v6 + 2;
if( (unsigned __int16)(v6 + 2) < (unsigned __int16)v6 )
return;
*((_QWORD *)&v9 + 1) = v0;
Entry = VfSuspectExcludedDriversAllocateEntry((unsigned __int16 *)&v9, 0x45586656u);
if( Entry )
{
VfDriverLock();
v8 = (VOID ***)qword_140C1C9E8;
if( *(__int64 **)qword_140C1C9E8 != &VfXdvExcludedDriversList )
__fastfail(3u);
*Entry = &VfXdvExcludedDriversList;
Entry[1] = v8;
*v8 = Entry;
qword_140C1C9E8 = (__int64)Entry;
VfDriverUnlock();
}
}
}
v0 = (__int64 *)((char *)v4 + 2);
}
while( (__int64 *)((char *)v4 + 2) < v1 );
}
}
}Referenced by:
No references.