ViThunkReplaceAllThunkedImports
UINT64 __stdcall ViThunkReplaceAllThunkedImports(
UINT64 *ImportAddress,
UINT64 ImportCount,
UINT64 AlreadyRunning,
UINT64 DriverIsSuspect){
__int64 v4;
int v5;
int v6;
UINT64 *v7;
_DRIVER_SPECIFIED_SPECIAL_VERIFIER_THUNKS **AllSpecialTables;
__int64 v9;
_DRIVER_SPECIFIED_SPECIAL_VERIFIER_THUNKS *v10;
int v11;
UINT64 v12;
v4 = (unsigned int)ImportCount;
v5 = DriverIsSuspect;
v6 = AlreadyRunning;
v7 = ImportAddress;
if( (_DWORD)AlreadyRunning || (_DWORD)DriverIsSuspect != 1 )
AllSpecialTables = 0i64;
else
AllSpecialTables = ViThunkFindAllSpecialTables(ImportAddress, (unsigned int)ImportCount);
if( (_DWORD)v4 )
{
v9 = v4;
do
{
if( AllSpecialTables )
{
v10 = *AllSpecialTables;
v11 = 0;
while( v10 )
{
if( (unsigned int)ViThunkReplaceImportEntry((_LIST_ENTRY *)(v10 + 6), v7) == 1 )
goto LABEL_20;
v10 = AllSpecialTables[++v11];
}
}
if( ((_DWORD)KernelVerifier
|| !(unsigned int)ViThunkReplaceImportIfThunkedRegular((ULONG_PTR)v7, &VfRegularThunks)
&& !(unsigned int)ViThunkReplaceImportIfThunkedOrderDependent(v7, v12)
&& !(unsigned int)ViThunkReplaceImportIfThunkedRegular((ULONG_PTR)v7, &VfXdvThunks))
&& !(unsigned int)ViThunkReplaceImportIfThunkedRegular((ULONG_PTR)v7, &VfPoolThunks)
&& !v6
&& v5 == 1 )
{
ViThunkReplaceImportEntry(&ViVerifierDriverAddedThunkListHead, v7);
}
LABEL_20:
++v7;
--v9;
}
while( v9 );
}
if( AllSpecialTables )
ExFreePoolWithTag(AllSpecialTables, 0);
return 1i64;
}Referenced by:
ViThunkApplyThunksCurrentSession