RtlExtractBitMapEx

char __fastcall RtlExtractBitMapEx(_QWORD *a1, __int64 a2, unsigned __int64 a3, unsigned __int64 a4){
  unsigned __int64 v4; 
  unsigned __int64 v7; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  unsigned __int64 *v14; 
  unsigned __int64 v15; 
  __int64 *v16; 
  __int64 v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  __int64 v21; 
  __int64 v22; 

  v4 = *(_QWORD *)a2;
  v7 = *a1 - a3;
  if( a4 > v7 )
    a4 = *a1 - a3;
  if( a4 <= v4 )
    v4 = a4;
  if( v4 )
  {
    v9 = a3 >> 3;
    if( (a3 & 7) != 0 )
    {
      v7 = a1[1];
      v14 = *(unsigned __int64 **)(a2 + 8);
      v15 = a3 & 0x3F;
      v16 = (__int64 *)(v7 + 8 * (a3 >> 6));
      v17 = 1i64 << v15;
      if( v4 >= 0x40 )
      {
        v18 = v4 >> 6;
        v4 += -64i64 * (v4 >> 6);
        do
        {
          v19 = ~(v17 - 1) & *v16++;
          v20 = v19 >> v15;
          *v14 = v20;
          v7 = v20 | (((v17 - 1) & *v16) << (64 - (unsigned __int8)v15));
          *v14++ = v7;
          --v18;
        }
        while( v18 );
      }
      if( v4 )
      {
        v21 = *v16;
        v22 = *v14 & ~((1i64 << v4) - 1);
        if( v4 > 64 - v15 )
        {
          v7 = (v21 & (unsigned __int64)~(v17 - 1)) >> v15;
          *v14 = v7 | ((v16[1] & ((1i64 << ((unsigned __int8)v4 + (unsigned __int8)v15 - 64)) - 1)) << (64 - (unsigned __int8)v15)) | v22;
        }
        else
        {
          v7 = v22 | ((v21 & (unsigned __int64)(((1i64 << v4) - 1) << v15)) >> v15);
          *v14 = v7;
        }
      }
    }
    else
    {
      v10 = v4;
      v11 = v4 & 7;
      v12 = v10 >> 3;
      if( v12 )
        LOBYTE(v7) = (unsigned __int8)memmove(*(VOID **)(a2 + 8), (const VOID *)(v9 + a1[1]), v12);
      if( v11 )
      {
        v13 = *(_QWORD *)(a2 + 8);
        LOBYTE(v7) = *(_BYTE *)(v9 + a1[1] + v12) & ((1 << v11) - 1) | *(_BYTE *)(v12 + v13) & ~((1 << v11) - 1);
        *(_BYTE *)(v12 + v13) = v7;
      }
    }
  }
  return v7;
}

Referenced by:

RtlShiftLeftBitMapEx