ViThunkApplyThunksCurrentSession
UINT64 __stdcall ViThunkApplyThunksCurrentSession(_KLDR_DATA_TABLE_ENTRY *DataTableEntry, UINT64 AlreadyRunning){
void *DllBase;
unsigned int v4;
unsigned int v5;
_VF_TARGET_DRIVER *Node;
_VF_TARGET_DRIVER *v7;
UINT64 *v8;
unsigned int v9;
unsigned int IsDriverSuspectForVerifier;
UINT64 Size;
DllBase = DataTableEntry->DllBase;
LODWORD(Size) = 0;
v4 = AlreadyRunning;
v5 = 0;
Node = VfTargetDriversGetNode(DllBase);
v7 = Node;
if( Node )
{
if( ((__int64)Node->u1.AllSharedExportThunks.SharedExportThunks & 1) == 0 )
{
v8 = (UINT64 *)RtlImageDirectoryEntryToData(DllBase, 1u, 0xCu, &Size);
if( v8 )
{
v9 = Size;
if( (_DWORD)Size )
{
if( v4 )
{
_InterlockedExchange(&ViLookasideAlreadyLoadedDrivers, 1);
_InterlockedExchange(&ViResourcesAlreadyLoadedDrivers, 1);
v9 = Size;
}
IsDriverSuspectForVerifier = ViIsDriverSuspectForVerifier(DataTableEntry);
v5 = ViThunkReplaceAllThunkedImports(v8, v9 >> 3, v4, IsDriverSuspectForVerifier);
if( v5 )
ViThunkReplaceAllSharedExports(v7, v4);
}
}
}
}
return v5;
}Referenced by:
VfThunkApplyThunks