MiCloneCaptureVadCommit

NTSTATUS __stdcall MiCloneCaptureVadCommit(INT64 a1){
  _QWORD *Pool; 
  _QWORD *v3; 
  __int64 *v5; 
  NTSTATUS v6; 
  _MMPTE *PteBase; 
  _MMSUPPORT_FULL *p_Vm; 
  _MMPTE *v9; 
  _MMSUPPORT_SHARED *SharedVm; 
  UINT8 v11; 
  UINT8 v12; 
  _MMPTE *v13; 
  _MMPTE *NextPageTable; 
  unsigned __int64 v15; 
  __int64 v16; 
  __int64 v17; 
  __int64 v18; 
  unsigned __int64 v19; 
  _QWORD *v20; 
  _MMSUPPORT_SHARED *v21; 
  UINT64 PageTableFlags; 
  UINT64 v23; 
  UINT8 WsIrql; 
  UINT64 LargePage; 
  _MMPTE *LastPte; 

  LODWORD(LargePage) = 0;
  Pool = MiAllocatePool(64i64, 0x90ui64, 0x6356694Dui64);
  v3 = Pool;
  if( !Pool )
    return -1073741670;
  *Pool = 0i64;
  v5 = Pool + 1;
  Pool[1] = 0i64;
  v6 = 0;
  PteBase = MmGetPteBase();
  p_Vm = &KeGetCurrentThread()->ApcState.Process->Vm;
  v9 = &PteBase[(*(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32)) & 0xFFFFFFFFFi64];
  LastPte = &PteBase[(*(unsigned int *)(a1 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 33) << 32)) & 0xFFFFFFFFFi64];
  SharedVm = MiGetSharedVm(&p_Vm->Instance);
  v11 = ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
  SharedVm->GoodCitizenWaiting = 0;
  v12 = v11;
  v13 = LastPte;
  WsIrql = v11;
  while( v9 <= v13 )
  {
    LODWORD(PageTableFlags) = 4;
    NextPageTable = MiGetNextPageTable(v9, v13, 0i64, v12, PageTableFlags, &LargePage, v23);
    if( !NextPageTable )
      break;
    v15 = (unsigned __int64)NextPageTable & 0xFFFFFFFFFFFFF000ui64;
    v16 = *v5;
    v17 = (__int64)((((unsigned __int64)NextPageTable & 0xFFFFFFFFFFFFF000ui64) << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
    if( *v5
      && (v18 = v3[v16 + 1], v19 = v18 & 0x1FFFFF, v19 + 1 > v19)
      && v19 != 0x1FFFFF
      && (v18 & 0xFFFFFFFFFFE00000ui64) + ((v19 + 1) << 21) == v17 )
    {
      v3[v16 + 1] = v18 & 0xFFFFFFFFFFE00000ui64 | (v18 + 1) & 0x1FFFFF;
    }
    else
    {
      if( v16 == 16 )
      {
        MiUnlockWorkingSetExclusive(&p_Vm->Instance, WsIrql);
        v20 = MiAllocatePool(64i64, 0x90ui64, 0x6356694Dui64);
        if( !v20 )
        {
          v6 = -1073741670;
          goto LABEL_18;
        }
        v5 = v20 + 1;
        *v20 = v3;
        v20[1] = 0i64;
        v3 = v20;
        v21 = MiGetSharedVm(&p_Vm->Instance);
        ExAcquireSpinLockExclusive((INT64 *)&v21->WorkingSetLock);
        v21->GoodCitizenWaiting = 0;
        v16 = *v5;
        v13 = LastPte;
      }
      v3[v16 + 2] = v17;
      ++*v5;
    }
    v12 = WsIrql;
    v9 = (_MMPTE *)(v15 + 4096);
  }
  MiUnlockWorkingSetExclusive(&p_Vm->Instance, v12);
LABEL_18:
  *(_QWORD *)(a1 + 8) = v3;
  if( v6 < 0 )
    MiCloneDiscardVadCommit(a1);
  return v6;
}

Referenced by:

MiAllocateChildVads