VmpDecodePreallocationRangeHandle

UINT64 __stdcall VmpDecodePreallocationRangeHandle(_DEVICE_OBJECT *LowerDeviceObject){
  __int64 v1; 
  _QWORD *v2; 
  _QWORD *v3; 

  if( _InterlockedDecrement64((volatile signed __int64 *)&LowerDeviceObject->gap4D[3]) == -1 )
    NT_ASSERT("NewCount != 0xffffffffffffffffui64");
  v2 = (_QWORD *)(v1 ^ (unsigned __int64)LowerDeviceObject);
  if( v2[2] != -1i64 )
    NT_ASSERT("VaMemoryRange->VaTreeNode.ParentValue == 0xffffffffffffffffui64");
  if( v2[3] )
    NT_ASSERT("VaMemoryRange->StartVpn == 0");
  if( v2[4] )
    NT_ASSERT("VaMemoryRange->LastVpn == 0");
  v3 = (_QWORD *)v2[5];
  if( v3 == v2 + 5 )
    NT_ASSERT("IsListEmpty(&VaMemoryRange->GpaRangeList) == 0");
  if( (_QWORD *)*v3 != v2 + 5 )
    NT_ASSERT("VaMemoryRange->GpaRangeList.Flink->Flink == &VaMemoryRange->GpaRangeList");
  return(UINT64)v2;
}

Referenced by:

VmCreateMemoryRange
VmFreePreallocationForRangeCreate