NtAllocateVirtualMemory
NTSTATUS __stdcall NtAllocateVirtualMemory(
PVOID ProcessHandle,
PVOID *BaseAddress,
UINT64 ZeroBits,
UINT64 *RegionSize,
UINT64 AllocationType,
UINT64 Protect){
unsigned __int64 v8;
CHAR a8;
__int64 v10;
__int64 v11;
PVOID v12;
__int64 v13;
NTSTATUS VirtualMemoryPrepare;
INT64 a5;
INT64 a6;
INT64 a9;
INT64 a10;
INT8 v20;
unsigned __int64 v21;
PVOID v22;
PVOID v23;
UINT64 v24;
PVOID Object[3];
INT64 a7[3];
VOID *v27;
int v28;
char v29;
INT64 result[3];
UINT64 v31;
v8 = 0i64;
v23 = 0i64;
v24 = 0i64;
memset((INT64)a7, 0i64);
a8 = *((_BYTE *)KeGetCurrentThread() + 562);
v20 = a8;
if( a8 )
{
v10 = (__int64)BaseAddress;
if( (unsigned __int64)BaseAddress >= 0x7FFFFFFF0000i64 )
v10 = 0x7FFFFFFF0000i64;
*(_QWORD *)v10 = *(_QWORD *)v10;
v11 = (__int64)RegionSize;
if( (unsigned __int64)RegionSize >= 0x7FFFFFFF0000i64 )
v11 = 0x7FFFFFFF0000i64;
*(_QWORD *)v11 = *(_QWORD *)v11;
}
v12 = *BaseAddress;
v23 = *BaseAddress;
v13 = *RegionSize;
v24 = *RegionSize;
v28 = AllocationType & 0x7F;
if( (AllocationType & 0x44000) != 0 )
return -1073741811;
memset((INT64)result, 0i64);
v22 = 0i64;
Object[0] = 0i64;
v21 = 0i64;
LODWORD(a10) = 0;
LODWORD(a9) = 0;
LODWORD(a6) = Protect;
LODWORD(a5) = AllocationType & 0xFFFFFF80;
VirtualMemoryPrepare = MiAllocateVirtualMemoryPrepare(
ProcessHandle,
(INT64)v12,
ZeroBits,
v13,
a5,
a6,
(INT64)a7,
a8,
a9,
a10,
0i64,
(INT64)result,
(INT64)Object);
if( VirtualMemoryPrepare >= 0 )
{
if( v27 )
{
if( v27 == (VOID *)-3i64 )
{
v8 = 1i64;
v21 = 1i64;
}
else
{
VirtualMemoryPrepare = PsReferencePartitionByHandle(v27, 2ui64, v20, 0x61566D4Dui64, &v21);
v8 = v21;
if( VirtualMemoryPrepare < 0 )
goto LABEL_13;
}
}
if( v29 == 1 && (AllocationType & 0x20400000) != 0x400000 )
{
VirtualMemoryPrepare = -1073741811;
LABEL_21:
if( result[0] )
++dword_140C4E52C;
else
++dword_140C4E528;
goto LABEL_14;
}
VirtualMemoryPrepare = MiAllocateVirtualMemory((__int64)result, (__int64 *)v8, (__int64 *)&v22);
if( VirtualMemoryPrepare >= 0 )
{
v12 = v22;
v23 = v22;
v13 = v31;
v24 = v31;
}
}
LABEL_13:
if( VirtualMemoryPrepare < 0 )
goto LABEL_21;
LABEL_14:
if( v8 >= 2 )
PsDereferencePartition(v8);
if( Object[0] )
ObfDereferenceObjectWithTag(Object[0], 0x6D566D4Dui64);
if( VirtualMemoryPrepare >= 0 )
{
*BaseAddress = v12;
*RegionSize = v13;
}
return VirtualMemoryPrepare;
}Referenced by:
No references.