PopGetIoLocation

_LARGE_INTEGER __stdcall PopGetIoLocation(POP_MCB_CONTEXT *McbContext, UINT64 FileOffset, UINT64 *MaxTransferLength){
  UINT64 v3; 
  _QWORD *v5; 
  __int64 v6; 
  __int64 v7; 
  UINT64 v8; 
  _QWORD *v10; 
  UINT64 v11; 
  UINT64 v12; 

  v3 = *((_QWORD *)McbContext + 2);
  v5 = (_QWORD *)*((_QWORD *)McbContext + 1);
  if( FileOffset < v3 || (v6 = *v5, FileOffset >= *v5 + v3) )
  {
    v10 = (_QWORD *)*((_QWORD *)McbContext + 1);
    v5 = v10;
    v11 = *((_QWORD *)McbContext + 2);
    if( FileOffset < v3 )
    {
      v5 = *(_QWORD **)McbContext;
      v11 = 0i64;
      *((_QWORD *)McbContext + 1) = *(_QWORD *)McbContext;
      v3 = 0i64;
      *((_QWORD *)McbContext + 2) = 0i64;
      v10 = v5;
    }
    v6 = *v5;
    v12 = v3;
    v3 = v11;
    if( FileOffset >= *v5 + v11 )
    {
      v6 = *v10;
      v3 = v12;
      do
      {
        v3 += v6;
        v5 = v10 + 2;
        *((_QWORD *)McbContext + 2) = v3;
        v10 = v5;
        *((_QWORD *)McbContext + 1) = v5;
        v6 = *v5;
      }
      while( FileOffset >= *v5 + v3 );
    }
  }
  v7 = v5[1];
  v8 = FileOffset - v3;
  *MaxTransferLength = v6 - v8;
  return(_LARGE_INTEGER)(v8 + v7);
}

Referenced by:

PopHiberReadChecksums
PopRequestRead
PopRequestWrite
PopWriteHiberPages