IopLiveDumpGetCapturePagesNoLock

VOID __fastcall IopLiveDumpGetCapturePagesNoLock(UINT64 *a1, INT64 a2, INT64 a3, UINT64 a4, INT64 a5, INT64 a6){
  __int64 v6; 
  UINT64 v7; 
  unsigned int v8; 
  int v12; 
  char v13; 
  UINT64 SetBits; 
  __int64 v15; 
  __int64 v16; 
  v6 = -1i64;
  v7 = *(_QWORD *)(a2 + 48);
  v8 = a4;
  *(_DWORD *)a5 = 0;
  if( v7 != -1i64 )
  {
    v12 = 0;
    v13 = 1;
    if( (_DWORD)a4 )
    {
      while( 1 )
      {
        SetBits = RtlFindSetBitsEx(a1, 1ui64, v7);
        if( SetBits < v7 || SetBits == -1i64 )
          break;
        v15 = *(unsigned int *)a5;
        v7 = SetBits + 1;
        *(_QWORD *)(a3 + 8 * v15) = SetBits;
        v12 = v15 + 1;
        *(_DWORD *)a5 = v15 + 1;
        if( (int)v15 + 1 >= v8 )
          goto LABEL_8;
      }
      v12 = *(_DWORD *)a5;
      v13 = 0;
    }
LABEL_8:
    if( v13 )
      v6 = *(_QWORD *)(a3 + 8i64 * (unsigned int)(v12 - 1)) + 1i64;
  }
  *(_QWORD *)(a2 + 48) = v6;
  if( *(_DWORD *)a5 )
  {
    v16 = *(_QWORD *)(a2 + 56);
    *(_DWORD *)(a2 + 40) = *(_DWORD *)a5;
    *(_QWORD *)a6 = v16;
    *(_QWORD *)(a2 + 56) = v16 + 1;
  }
}

Referenced by:

IopLiveDumpBufferDumpData
IopLiveDumpGetNtMergePages