VfDriverEnableVerifier
__int64 __fastcall VfDriverEnableVerifier(__int64 a1, __int64 a2, _DWORD *a3){
__int64 v3;
__int64 v4;
int v5;
int v6;
unsigned int v7;
int v8;
BOOL v9;
PVOID *v10;
__int64 *v11;
*a3 = 0;
v3 = a2;
v4 = a1;
v5 = 0;
v6 = 0;
v7 = 0;
v8 = 0;
VfDriverLock(a1, a2, (INT64)a3);
if( ViSuspectDriversLookupEntry((UNICODE_STRING *)(v4 + 24)) )
goto LABEL_23;
if( !v3 )
{
LOBYTE(v9) = 1;
ExAcquireResourceSharedLite(&PsLoadedModuleResource, v9);
v10 = (PVOID *)PsLoadedModuleList;
v6 = 1;
if( PsLoadedModuleList == &PsLoadedModuleList )
goto LABEL_7;
do
{
v3 = (__int64)v10;
if( RtlEqualUnicodeString((UNICODE_STRING *)(v4 + 24), (UNICODE_STRING *)(v10 + 11), 1u) )
break;
v10 = (PVOID *)*v10;
++v7;
}
while( v10 != &PsLoadedModuleList );
v4 = a1;
if( v10 == &PsLoadedModuleList )
LABEL_7:
v3 = 0i64;
if( !v3 )
goto LABEL_16;
}
if( (~VerifierModifyableOptions & (unsigned int)MmVerifierData) != 0
|| v6 && (v7 <= 1 || VfUtilIsProtectedDriver((PCUNICODE_STRING)(v3 + 88))) )
{
v8 = -1073741554;
}
else
{
v8 = MmRemoveImportOptimizationForDriverVerifier(v3);
if( v8 >= 0 )
{
v5 = 1;
LABEL_16:
v11 = (__int64 *)qword_140C1D0B8;
if( *(_VF_SUSPECT_DRIVER_ENTRY ***)qword_140C1D0B8 != &VfSuspectDriversList )
__fastfail(3u);
*(_QWORD *)(v4 + 8) = qword_140C1D0B8;
*(_QWORD *)v4 = &VfSuspectDriversList;
*v11 = v4;
qword_140C1D0B8 = v4;
*a3 = 1;
if( v5 )
VfDriverLoadImage(v3, v4, 0, 1u);
++dword_140C2A698;
}
}
if( v6 )
ExReleaseResourceLite(&PsLoadedModuleResource);
LABEL_23:
ViDriversLoadLockOwner = 0i64;
KeReleaseMutex(&ViDriversLoadLock, 0);
return(unsigned int)v8;
}Referenced by:
MmEnableVerifierForDriver
VfDriverEnableVerifierForAll