VfDriverEnableVerifier
NTSTATUS __stdcall VfDriverEnableVerifier(
PVOID PreAllocatedEntry,
_KLDR_DATA_TABLE_ENTRY *DataTableEntry,
UINT64 *EntryInserted){
_VF_SUSPECT_DRIVER_ENTRY *v4;
int v5;
int v6;
unsigned int v7;
int v8;
_KLDR_DATA_TABLE_ENTRY *Flink;
_VF_SUSPECT_DRIVER_ENTRY **v10;
*(_DWORD *)EntryInserted = 0;
v4 = (_VF_SUSPECT_DRIVER_ENTRY *)PreAllocatedEntry;
v5 = 0;
v6 = 0;
v7 = 0;
v8 = 0;
VfDriverLock();
if( ViSuspectDriversLookupEntry(&v4->BaseName) )
goto LABEL_23;
if( !DataTableEntry )
{
ExAcquireResourceSharedLite((UINT64)&PsLoadedModuleResource, 1);
Flink = (_KLDR_DATA_TABLE_ENTRY *)PsLoadedModuleList;
v6 = 1;
if( (INT64 *)PsLoadedModuleList == &PsLoadedModuleList )
goto LABEL_7;
do
{
DataTableEntry = Flink;
if( (unsigned __int8)RtlEqualUnicodeString(&v4->BaseName, &Flink->BaseDllName, 1u) )
break;
Flink = (_KLDR_DATA_TABLE_ENTRY *)Flink->InLoadOrderLinks.Flink;
++v7;
}
while( Flink != (_KLDR_DATA_TABLE_ENTRY *)&PsLoadedModuleList );
v4 = (_VF_SUSPECT_DRIVER_ENTRY *)PreAllocatedEntry;
if( Flink == (_KLDR_DATA_TABLE_ENTRY *)&PsLoadedModuleList )
LABEL_7:
DataTableEntry = 0i64;
if( !DataTableEntry )
goto LABEL_16;
}
if( (~VerifierModifyableOptions & (unsigned int)MmVerifierData) != 0
|| v6 && (v7 <= 1 || VfUtilIsProtectedDriver(&DataTableEntry->BaseDllName)) )
{
v8 = -1073741554;
}
else
{
v8 = MmRemoveImportOptimizationForDriverVerifier((INT64)DataTableEntry);
if( v8 >= 0 )
{
v5 = 1;
LABEL_16:
v10 = (_VF_SUSPECT_DRIVER_ENTRY **)qword_140C1D0B8;
if( *(_VF_SUSPECT_DRIVER_ENTRY ***)qword_140C1D0B8 != &VfSuspectDriversList )
__fastfail(3u);
v4->Links.Blink = (_LIST_ENTRY *)qword_140C1D0B8;
v4->Links.Flink = (_LIST_ENTRY *)&VfSuspectDriversList;
*v10 = v4;
qword_140C1D0B8 = (__int64)v4;
*(_DWORD *)EntryInserted = 1;
if( v5 )
VfDriverLoadImage(DataTableEntry, v4, 0, 1u);
++dword_140C2A698;
}
}
if( v6 )
ExReleaseResourceLite(&PsLoadedModuleResource);
LABEL_23:
ViDriversLoadLockOwner = 0i64;
KeReleaseMutex(&ViDriversLoadLock, 0);
return v8;
}Referenced by:
MmEnableVerifierForDriver
VfDriverEnableVerifierForAll