MiProcessLoaderEntry

VOID __stdcall MiProcessLoaderEntry(_KLDR_DATA_TABLE_ENTRY *DataTableEntry, UINT64 Insert){
  INT64 v2; 
  _ETHREAD *CurrentThread; 
  int v4; 
  _LIST_ENTRY *v6; 
  BOOL v7; 
  _QWORD *v8; 
  void *DllBase; 
  unsigned __int64 v10; 
  _QWORD *v11; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  UINT8 OldIrql; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = Insert;
  OldIrql = 0;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceExclusiveLite((UINT64)&PsLoadedModuleResource, 1, v2);
  if( v4 != 1 )
  {
    if( (MiFlags & 0x80000) == 0 )
      RtlRemoveInvertedFunctionTable(DataTableEntry->DllBase);
    MmLockLoadedModuleListExclusive(&OldIrql);
    Flink = DataTableEntry->InLoadOrderLinks.Flink;
    Blink = DataTableEntry->InLoadOrderLinks.Blink;
    if( (_KLDR_DATA_TABLE_ENTRY *)DataTableEntry->InLoadOrderLinks.Flink->Blink == DataTableEntry
      && (_KLDR_DATA_TABLE_ENTRY *)Blink->Flink == DataTableEntry )
    {
      Blink->Flink = Flink;
      Flink->Blink = Blink;
      RtlAvlRemoveNode((UINT64 *)&BugCheckParameter3, (INT64 *)&DataTableEntry[1].FullDllName);
      ExReleaseSpinLockExclusiveFromDpcLevel(&PsLoadedModuleSpinLock);
      __writecr8(OldIrql);
      goto LABEL_12;
    }
LABEL_20:
    __fastfail(3u);
  }
  MmLockLoadedModuleListExclusive(&OldIrql);
  v6 = (_LIST_ENTRY *)*(&PsLoadedModuleList + 1);
  if( *(INT64 **)*(&PsLoadedModuleList + 1) != &PsLoadedModuleList )
    goto LABEL_20;
  DataTableEntry->InLoadOrderLinks.Flink = (_LIST_ENTRY *)&PsLoadedModuleList;
  v7 = 0;
  DataTableEntry->InLoadOrderLinks.Blink = v6;
  v6->Flink = &DataTableEntry->InLoadOrderLinks;
  v8 = BugCheckParameter3;
  *(&PsLoadedModuleList + 1) = (INT64)DataTableEntry;
  DllBase = DataTableEntry->DllBase;
  if( BugCheckParameter3 )
  {
    while( 1 )
    {
      v10 = *(v8 - 23);
      if( (unsigned __int64)DllBase <= v10 + (unsigned int)(*((_DWORD *)v8 - 42) - 1) )
      {
        if( (unsigned __int64)DllBase >= v10 )
          KeBugCheckEx(0x1Au, (PVOID)0x2101, DllBase, v8, 0i64);
        v11 = (_QWORD *)*v8;
        if( !*v8 )
        {
          v7 = 0;
          break;
        }
      }
      else
      {
        v11 = (_QWORD *)v8[1];
        if( !v11 )
        {
          v7 = 1;
          break;
        }
      }
      v8 = v11;
    }
  }
  RtlAvlInsertNodeEx(
    (_RTL_BALANCED_NODE **)&BugCheckParameter3,
    (UINT64)v8,
    v7,
    (_RTL_BALANCED_NODE *)&DataTableEntry[1].FullDllName);
  ExReleaseSpinLockExclusiveFromDpcLevel(&PsLoadedModuleSpinLock);
  __writecr8(OldIrql);
  if( (MiFlags & 0x80000) == 0 )
    RtlInsertInvertedFunctionTable(DataTableEntry->DllBase, DataTableEntry->SizeOfImage);
LABEL_12:
  MiReleaseResourceLite(&CurrentThread->Tcb);
}

Referenced by:

MiConstructLoaderEntry