LdrProcessRelocationBlockLongLong

_IMAGE_BASE_RELOCATION *__stdcall LdrProcessRelocationBlockLongLong(
        ULONG_PTR ImageMachine,
        UINT64 Va,
        PUSHORT SizeOfBlock,
        _LONGLONG RelocationPtr,
        INT64 Diff){
  _IMAGE_BASE_RELOCATION *v5; 
  int v7; 
  unsigned __int64 v8; 
  unsigned int v9; 

  v5 = *(_IMAGE_BASE_RELOCATION **)&RelocationPtr;
  v7 = (unsigned __int16)ImageMachine;
  v8 = *(_QWORD *)&RelocationPtr + 2i64 * (unsigned int)SizeOfBlock;
  if( *(_QWORD *)&RelocationPtr >= v8 )
    return v5;
  while( 1 )
  {
    if( ((1 << (LOWORD(v5->VirtualAddress) >> 12)) & 0x3A0) == 0 )
    {
      v9 = LdrpGenericProcessRelocation((UINT16 *)v5, Va, Diff);
      goto LABEL_9;
    }
    if( v7 != 448 )
      break;
    v9 = LdrpArmProcessRelocation((UINT16 *)v5, Va, Diff);
LABEL_9:
    if( !v9 )
      return 0i64;
    v5 = (_IMAGE_BASE_RELOCATION *)((char *)v5 + 2 * v9);
    if( (unsigned __int64)v5 >= v8 )
      return v5;
  }
  if( v7 == 450 || v7 == 452 )
  {
    v9 = LdrpThumbProcessRelocation((UINT16 *)v5, Va, Diff);
    goto LABEL_9;
  }
  return 0i64;
}

Referenced by:

LdrRelocateImageWithBias