HalpBlkAllocateAndShadowMemory
UINT64 __stdcall HalpBlkAllocateAndShadowMemory(UINT64 a3, UINT64 NumberPages, INT64 r8, INT64 a4, INT64 *a5){
int v5;
_MEMORY_CACHING_TYPE v6;
UINT64 v8;
INT64 v9;
VOID *v10;
size_t v11;
UINT64 Protection;
INT64 Protectiona;
v5 = a4;
v6 = (int)NumberPages;
v8 = 0i64;
v9 = HalpAllocPhysicalMemory(LoaderBlock, 0i64, (unsigned int)NumberPages, 0i64);
if( v9 )
{
if( a5 )
*a5 = v9;
LODWORD(Protection) = 4;
v10 = (VOID *)HalpMap((_LARGE_INTEGER)v9, v6, MmCached, 0, Protection);
v8 = (UINT64)v10;
if( v10 )
{
v11 = v6 << 12;
if( a3 )
{
memmove(v10, (const VOID *)a3, v11);
}
else
{
memset(v10, 0i64, v11);
a3 = v8;
}
if( v6 )
{
while( 1 )
{
LODWORD(Protectiona) = v5;
if( HalpBlkAddVirtualMapping(*(&CmpDummyThreadEvent + 488), v9, a3, 1i64, Protectiona) < 0 )
break;
v9 += 4096i64;
a3 += 4096i64;
if( --v6 == MmNonCached )
return v8;
}
return 0i64;
}
}
}
return v8;
}Referenced by:
HalpBlkAllocateShadowCodePages
HalpBlkAllocateShadowData