MiCaptureImageExceptionValues

void __fastcall MiCaptureImageExceptionValues(__int64 a1){
  char *v1; 
  IMAGE_NT_HEADERS *v3; 
  _RTL_BITMAP *v4; 
  IMAGE_NT_HEADERS *v5; 
  unsigned int v6; 
  UINT64 v7; 
  _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *v8; 
  UINT64 Size; 
  PRTL_BITMAP BitMapHeader; 
  v1 = *(char **)(a1 + 48);
  v3 = RtlImageNtHeader(v1);
  v4 = *(_RTL_BITMAP **)(a1 + 272);
  v5 = v3;
  v6 = *(_DWORD *)(a1 + 64) >> 12;
  v4->SizeOfBitMap = v6;
  v4->Buffer = &v4[1].SizeOfBitMap;
  RtlClearAllBits(v4);
  if( v5->OptionalHeader.NumberOfRvaAndSizes > 3 )
  {
    v7 = *(unsigned int *)(a1 + 152);
    v8 = (_IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *)&v1[v5->OptionalHeader.DataDirectory[3].VirtualAddress];
    *(_QWORD *)(a1 + 16) = v8;
    Size = v5->OptionalHeader.DataDirectory[3].Size;
    *(_DWORD *)(a1 + 24) = Size;
    if( (int)RtlMarkExceptionHandlingPages((UINT64)v1, v7, v8, Size, v4) < 0 )
    {
      LODWORD(BitMapHeader) = v6;
      DbgPrintEx(
        0x66u,
        0,
        "Image %wZ has unrecognized unwind information causing a charge of %u pages\n",
        a1 + 88,
        BitMapHeader);
      RtlSetAllBits(v4);
    }
  }
}

Referenced by:

MiConstructLoaderEntry