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.