MiCaptureImageExceptionValues

VOID __stdcall MiCaptureImageExceptionValues(_KLDR_DATA_TABLE_ENTRY *DataTableEntry){
  char *DllBase; 
  _DWORD *v3; 
  _RTL_BITMAP *SectionPointer; 
  _DWORD *v5; 
  unsigned int v6; 
  UINT64 SizeOfImageNotRounded; 
  _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *v8; 
  UINT64 v9; 
  _RTL_BITMAP *ImagePages; 

  DllBase = (char *)DataTableEntry->DllBase;
  LODWORD(v3) = RtlImageNtHeader((UINT64)DllBase);
  SectionPointer = (_RTL_BITMAP *)DataTableEntry[1].SectionPointer;
  v5 = v3;
  v6 = DataTableEntry->SizeOfImage >> 12;
  SectionPointer->SizeOfBitMap = v6;
  SectionPointer->Buffer = &SectionPointer[1].SizeOfBitMap;
  RtlClearAllBits(SectionPointer);
  if( v5[33] > 3u )
  {
    SizeOfImageNotRounded = DataTableEntry->SizeOfImageNotRounded;
    v8 = (_IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *)&DllBase[v5[40]];
    DataTableEntry->ExceptionTable = v8;
    v9 = (unsigned int)v5[41];
    DataTableEntry->ExceptionTableSize = v9;
    if( RtlMarkExceptionHandlingPages((UINT64)DllBase, SizeOfImageNotRounded, v8, v9, SectionPointer) < 0 )
    {
      LODWORD(ImagePages) = v6;
      DbgPrintEx(
        0x66u,
        0,
        "Image %wZ has unrecognized unwind information causing a charge of %u pages\n",
        &DataTableEntry->BaseDllName,
        ImagePages);
      RtlSetAllBits(SectionPointer);
    }
  }
}

Referenced by:

MiConstructLoaderEntry