RtlpCaptureRetpolineBinaryInfoForImage

NTSTATUS __stdcall RtlpCaptureRetpolineBinaryInfoForImage(
        VOID *Base,
        INT64 a2,
        UINT64 a3,
        INT64 a4,
        INT64 a5,
        INT64 a6){
  __int64 v7; 
  _DWORD *v10; 
  NTSTATUS v11; 
  VOID *v12; 
  INT64 v14; 
  unsigned int v15; 
  unsigned int v16; 
  unsigned int *v17; 
  __int64 v18; 
  unsigned int v19; 
  __int64 v20; 
  __int64 Size[5]; 

  v7 = (unsigned int)a3;
  *(_OWORD *)a6 = 0i64;
  *(_OWORD *)(a6 + 16) = 0i64;
  *(_OWORD *)(a6 + 32) = 0i64;
  LODWORD(v10) = LdrImageDirectoryEntryToLoadConfig(Base);
  v11 = 0;
  if( !v10 || *v10 < 0xC8u )
    return -1073741637;
  if( *((_QWORD *)v10 + 15) )
    *(_DWORD *)(a6 + 4) = v10[30] - a2;
  v12 = RtlImageDirectoryEntryToData(Base, 1u, 0xCu, (UINT64 *)Size);
  if( v12 )
    *(_DWORD *)(a6 + 8) = (_DWORD)v12 - (_DWORD)Base;
  if( a4 )
  {
    v14 = a4 - a2;
    v15 = *(_DWORD *)(a5 + 72);
    v16 = *(_DWORD *)(a5 + 76);
    if( v15 <= *(_DWORD *)(a5 + 68) )
      v15 = *(_DWORD *)(a5 + 68);
    if( v16 <= v15 )
      v16 = v15;
    v17 = (unsigned int *)(a5 + 4);
    v18 = 16i64;
    do
    {
      v19 = v16;
      v16 = *v17++;
      if( v16 <= v19 )
        v16 = v19;
      --v18;
    }
    while( v18 );
    v20 = v14 + v16;
    if( __OFSUB__(v20, v14) || v20 > 0x7FFFFFFF || v14 - v7 < (__int64)0xFFFFFFFF80000000ui64 )
      return -1073741776;
    else
      *(_DWORD *)a6 = v14;
  }
  return v11;
}

Referenced by:

RtlPerformRetpolineRelocationsOnImageEx
RtlUpdateImportRelocationsInImage