VfSuspectDriversLoadCallback
VOID __fastcall VfSuspectDriversLoadCallback(
_KLDR_DATA_TABLE_ENTRY *DataTableEntry,
_VF_SUSPECT_DRIVER_ENTRY *Verifier,
UINT64 KernelEntry,
UINT64 AlreadyRunning){
int v4;
char v5;
_VF_SUSPECT_DRIVER_ENTRY *Flink;
int v8;
__int64 i;
__int64 j;
_VF_SUSPECT_DRIVER_ENTRY *v11;
int v12;
UINT8 v13;
int v14;
_VF_SUSPECT_DRIVER_ENTRY **v15;
int v16;
int v17;
v4 = AlreadyRunning;
v5 = KernelEntry;
Flink = Verifier;
v8 = 0;
VfDriverLock((INT64)DataTableEntry, (INT64)Verifier, KernelEntry);
if( (VfOptionFlags & 1) != 0 )
{
for( i = VfExcludedDriversList; (__int64 *)i != &VfExcludedDriversList; i = *(_QWORD *)i )
{
if( RtlEqualUnicodeString((UNICODE_STRING *)(i + 16), (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u) )
goto LABEL_58;
}
}
if( (MmVerifyDriverLevel & 0xEF8000) != 0 || (VfRuleClasses & 0x800000000i64) != 0 )
{
for( j = VfXdvExcludedDriversList; (__int64 *)j != &VfXdvExcludedDriversList; j = *(_QWORD *)j )
{
if( RtlEqualUnicodeString((UNICODE_STRING *)(j + 16), (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u) )
goto LABEL_58;
}
}
if( RtlEqualUnicodeString((UNICODE_STRING *)&VfTcpIpName, (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u) == 1 )
{
VfTcpIpDllBase = *((_QWORD *)DataTableEntry + 6);
VfTcpIpSizeOfImage = *((_DWORD *)DataTableEntry + 16);
}
else if( RtlEqualUnicodeString((UNICODE_STRING *)&VfTdxName, (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u) == 1 )
{
VfTdxDllBase = *((_QWORD *)DataTableEntry + 6);
VfTdxSizeOfImage = *((_DWORD *)DataTableEntry + 16);
}
else if( RtlEqualUnicodeString((UNICODE_STRING *)VfMrxsmbName, (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u) == 1 )
{
VfMrxsmbDllBase = *((_QWORD *)DataTableEntry + 6);
VfMrxsmbSizeOfImage = *((_DWORD *)DataTableEntry + 16);
}
else if( RtlEqualUnicodeString((UNICODE_STRING *)&VfTmName, (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u) == 1 )
{
VfTmDllBase = *((_QWORD *)DataTableEntry + 6);
VfTmSizeOfImage = *((_DWORD *)DataTableEntry + 16);
}
else if( RtlEqualUnicodeString((UNICODE_STRING *)&VfWin32kName, (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u) == 1 )
{
VfWin32kDllBase = *((_QWORD *)DataTableEntry + 6);
VfWin32kSizeOfImage = *((_DWORD *)DataTableEntry + 16);
}
else if( RtlEqualUnicodeString((UNICODE_STRING *)&VfKsName, (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u) == 1 )
{
VfKsDllBase = *((_QWORD *)DataTableEntry + 6);
VfKsSizeOfImage = *((_DWORD *)DataTableEntry + 16);
}
if( v4 || (v8 = VfThunkApplyMandatoryThunks((__int64)DataTableEntry, v17)) != 0 )
{
if( Flink )
{
LABEL_45:
v12 = 1;
LABEL_46:
if( v17 )
{
if( v12 )
v16 = VfTargetDriversEnableVerifier(*((VOID **)DataTableEntry + 6), Flink);
else
v16 = 1;
}
else
{
LOBYTE(v11) = v5;
v16 = VfTargetDriversAdd(*((VOID **)DataTableEntry + 6), *((unsigned int *)DataTableEntry + 16), v11);
}
if( v12 || (v8 = 0, (_DWORD)KernelVerifier) )
{
v8 = 0;
if( v16 )
{
v8 = VfThunkApplyThunks((__int64)DataTableEntry, v17);
if( v8 )
{
if( v12 )
{
VfUtilPrintCheckinString((_UNICODE_STRING *)((char *)DataTableEntry + 88));
++dword_140C2A650;
++Flink->Loads;
VfNotifyVerifierExtensions(1, (__int64)DataTableEntry);
VfCheckImageCompliance(DataTableEntry);
}
}
else
{
VfTargetDriversRemove((__int64)DataTableEntry);
}
}
}
goto LABEL_58;
}
Flink = VfSuspectDriversList;
v12 = 0;
while( Flink != (_VF_SUSPECT_DRIVER_ENTRY *)&VfSuspectDriversList )
{
v13 = RtlEqualUnicodeString(&Flink->BaseName, (UNICODE_STRING *)((char *)DataTableEntry + 88), 1u);
v12 = v13;
if( v13 )
goto LABEL_46;
Flink = (_VF_SUSPECT_DRIVER_ENTRY *)Flink->Links.Flink;
}
if( (_DWORD)KernelVerifier )
{
if( !v4 )
{
v14 = ViForceAllDriversSuspect;
goto LABEL_42;
}
}
else if( (_DWORD)ViVerifyAllDrivers != 1 )
{
if( !VfRandomVerifiedDrivers
|| (++ViLoadedDriversCount, !_bittest((const signed __int32 *)qword_140D491F8, ViLoadedDriversCount)) )
{
v14 = 0;
LABEL_42:
if( !v14 )
{
Flink = 0i64;
goto LABEL_46;
}
goto LABEL_38;
}
--VfRandomVerifiedDrivers;
}
LABEL_38:
Flink = VfSuspectDriversAllocateEntry((_UNICODE_STRING *)((char *)DataTableEntry + 88));
if( !Flink )
goto LABEL_46;
v15 = (_VF_SUSPECT_DRIVER_ENTRY **)qword_140C1D0B8;
if( *(_VF_SUSPECT_DRIVER_ENTRY ***)qword_140C1D0B8 != &VfSuspectDriversList )
__fastfail(3u);
Flink->Links.Flink = (_LIST_ENTRY *)&VfSuspectDriversList;
Flink->Links.Blink = (_LIST_ENTRY *)v15;
*v15 = Flink;
qword_140C1D0B8 = (__int64)Flink;
goto LABEL_45;
}
LABEL_58:
ViDriversLoadLockOwner = 0i64;
KeReleaseMutex(&ViDriversLoadLock, 0);
if( v8 )
*((_DWORD *)DataTableEntry + 26) |= 0x2000000u;
}Referenced by:
VfDriverLoadImage