VslValidateDynamicCodePages

INT64 __fastcall VslValidateDynamicCodePages(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  unsigned int v12; 
  INT64 result[14]; 
  struct _MDL MemoryDescriptorList; 
  INT64 v16; 
  struct _MDL v17; 
  INT64 v18; 
  memset((INT64)result, 0i64);
  memset(&v17.AllocationProcessorNumber, 0, 20);
  v18 = 0i64;
  memset(&MemoryDescriptorList.AllocationProcessorNumber, 0, 20);
  v16 = 0i64;
  v8 = 8
     * (((unsigned int)(*(_DWORD *)(a1 + 40) + *(_DWORD *)(a1 + 44)) + 4095i64 + (*(_DWORD *)(a1 + 32) & 0xFFFui64)) >> 12)
     + 48;
  v9 = (v8 + (a1 & 0xFFF) + 4095) >> 12;
  if( v9 > 1 )
    return 3221225485i64;
  v17.Next = 0i64;
  v17.Size = 8 * (v9 + 6);
  v17.MdlFlags = 0;
  v17.StartVa = (void *)(a1 & 0xFFFFFFFFFFFFF000ui64);
  v17.ByteOffset = a1 & 0xFFF;
  v17.ByteCount = v8;
  MiProbeAndLockPages((INT64)&v17, 0, 0i64);
  v10 = 8
      * (((*(_DWORD *)(a4 + 32) & 0xFFFi64)
        + 4095
        + (unsigned __int64)(unsigned int)(*(_DWORD *)(a4 + 40) + *(_DWORD *)(a4 + 44))) >> 12)
      + 48;
  v11 = (v10 + (a4 & 0xFFF) + 4095) >> 12;
  if( v11 > 1 )
    return 3221225485i64;
  MemoryDescriptorList.Next = 0i64;
  MemoryDescriptorList.Size = 8 * (v11 + 6);
  MemoryDescriptorList.MdlFlags = 0;
  MemoryDescriptorList.StartVa = (void *)(a4 & 0xFFFFFFFFFFFFF000ui64);
  MemoryDescriptorList.ByteOffset = a4 & 0xFFF;
  MemoryDescriptorList.ByteCount = v10;
  MiProbeAndLockPages((INT64)&MemoryDescriptorList, 0, 0i64);
  result[1] = a1;
  result[2] = v18;
  result[3] = a4;
  result[4] = v16;
  result[5] = a2;
  result[6] = a3;
  v12 = VslpEnterIumSecureMode(2u, 31, 0i64, (INT64)result);
  MmUnlockPages(&MemoryDescriptorList);
  MmUnlockPages(&v17);
  return v12;
}

Referenced by:

No references.