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