VfThunkApplyThunks

UINT64 __stdcall VfThunkApplyThunks(_KLDR_DATA_TABLE_ENTRY *DataTableEntry, UINT64 AlreadyRunning){
  unsigned int v2; 
  unsigned int v4; 
  _ADAPTER_OBJECT *i; 
  _ADAPTER_OBJECT *NextSession; 
  _ADAPTER_OBJECT *v7; 
  _KAPC_STATE ApcState; 

  v2 = AlreadyRunning;
  memset(&ApcState, 0, sizeof(ApcState));
  if( !(_DWORD)AlreadyRunning || !MmIsSessionAddress(DataTableEntry->DllBase) )
    return ViThunkApplyThunksCurrentSession(DataTableEntry, v2);
  v4 = 1;
  for( i = 0i64; ; i = v7 )
  {
    NextSession = (_ADAPTER_OBJECT *)MmGetNextSession(i);
    v7 = NextSession;
    if( !NextSession )
      break;
    if( MmAttachSession(NextSession, &ApcState) >= 0 )
    {
      v4 = 1;
      if( MmIsDriverLoadedCurrentSession(DataTableEntry->DllBase) )
        v4 = ViThunkApplyThunksCurrentSession(DataTableEntry, v2);
      MmDetachSession(v7, &ApcState);
      if( !v4 )
      {
        MmQuitNextSession(v7);
        return v4;
      }
    }
  }
  return v4;
}

Referenced by:

VfSuspectDriversLoadCallback