KiPcToFileHeader

VOID *__stdcall KiPcToFileHeader(
        VOID *PcValue,
        _LDR_DATA_TABLE_ENTRY **DataTableEntry,
        UINT64 DriversOnly,
        UINT8 *InKernelOrHal){
  int v5; 
  _LIST_ENTRY *p_LoadOrderListHead; 
  _LDR_DATA_TABLE_ENTRY *Flink; 
  VOID *v10; 
  unsigned int v11; 
  _LDR_DATA_TABLE_ENTRY *v12; 
  unsigned __int64 DllBase; 

  v5 = DriversOnly;
  if( (unsigned int)InitializationPhase >= 2 )
    p_LoadOrderListHead = (_LIST_ENTRY *)&PsLoadedModuleList;
  else
    p_LoadOrderListHead = &KeLoaderBlock_0->LoadOrderListHead;
  Flink = (_LDR_DATA_TABLE_ENTRY *)p_LoadOrderListHead->Flink;
  v10 = 0i64;
  *InKernelOrHal = 0;
  if( Flink )
  {
    v11 = 0;
    while( Flink != (_LDR_DATA_TABLE_ENTRY *)p_LoadOrderListHead )
    {
      if( !MmIsAddressValidEx((INT64)Flink) )
        return 0i64;
      if( ++v11 <= 2 && v5 == 1 )
      {
        Flink = (_LDR_DATA_TABLE_ENTRY *)Flink->InLoadOrderLinks.Flink;
      }
      else
      {
        v12 = Flink;
        Flink = (_LDR_DATA_TABLE_ENTRY *)Flink->InLoadOrderLinks.Flink;
        DllBase = (unsigned __int64)v12->DllBase;
        if( (unsigned __int64)PcValue >= DllBase && (unsigned __int64)PcValue < DllBase + v12->SizeOfImage )
        {
          *DataTableEntry = v12;
          v10 = (VOID *)DllBase;
          if( v11 <= 2 )
            *InKernelOrHal = 1;
          return v10;
        }
      }
    }
  }
  return v10;
}

Referenced by:

KeBugCheck2
KiDumpParameterImages