MiCaptureUlongPtrArray

INT64 __stdcall MiCaptureUlongPtrArray(PVOID Destination, PVOID Source, UINT64 ArraySize){
  __int64 v4; 
  __int16 v5; 
  UINT64 v6; 
  UINT64 v7; 
  UINT64 v8; 
  v4 = *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1408i64);
  if( v4 && ((v5 = *(_WORD *)(v4 + 8), v5 == 332) || v5 == 452) )
  {
    v6 = 4 * ArraySize;
    if( 4 * ArraySize )
    {
      if( ((unsigned __int8)Source & 3) != 0 )
        ExRaiseDatatypeMisalignment();
      if( (unsigned __int64)Source + v6 > 0x7FFFFFFF0000i64 || (char *)Source + v6 < Source )
        MEMORY[0x7FFFFFFF0000] = 0;
    }
    v7 = 0i64;
    if( (ArraySize & 0xFFFFFFFFFFFFFFF8ui64) != 0 )
    {
      do
      {
        *((_QWORD *)Destination + v7) = *((unsigned int *)Source + v7);
        *((_QWORD *)Destination + v7 + 1) = *((unsigned int *)Source + v7 + 1);
        *((_QWORD *)Destination + v7 + 2) = *((unsigned int *)Source + v7 + 2);
        *((_QWORD *)Destination + v7 + 3) = *((unsigned int *)Source + v7 + 3);
        *((_QWORD *)Destination + v7 + 4) = *((unsigned int *)Source + v7 + 4);
        *((_QWORD *)Destination + v7 + 5) = *((unsigned int *)Source + v7 + 5);
        *((_QWORD *)Destination + v7 + 6) = *((unsigned int *)Source + v7 + 6);
        *((_QWORD *)Destination + v7 + 7) = *((unsigned int *)Source + v7 + 7);
        v7 += 8i64;
      }
      while( v7 < (ArraySize & 0xFFFFFFFFFFFFFFF8ui64) );
    }
    if( (ArraySize & 7) != 0 )
    {
      do
      {
        *((_QWORD *)Destination + v7) = *((unsigned int *)Source + v7);
        ++v7;
      }
      while( v7 < ArraySize );
    }
  }
  else
  {
    v8 = 8 * ArraySize;
    if( v8 )
    {
      if( ((unsigned __int8)Source & 7) != 0 )
        ExRaiseDatatypeMisalignment();
      if( (unsigned __int64)Source + v8 > 0x7FFFFFFF0000i64 || (char *)Source + v8 < Source )
        MEMORY[0x7FFFFFFF0000] = 0;
    }
    memmove((UINT8 *)Destination, (UINT8 *)Source, v8);
  }
  return 0i64;
}

Referenced by:

NtFreeUserPhysicalPages
NtMapUserPhysicalPages
NtMapUserPhysicalPagesScatter