HalpBlkAllocateAndShadowMemory
INT64 __stdcall HalpBlkAllocateAndShadowMemory(VOID *Src, INT64 a2){
int v2;
int v3;
__int64 v4;
UINT8 *v6;
INT64 v7;
UINT8 *v8;
INT64 v10;
INT64 *v11;
v3 = v2;
v4 = (unsigned int)a2;
v6 = 0i64;
v7 = HalpAllocPhysicalMemory(HalpMmLoaderBlock, 0i64);
if( v7 )
{
if( v11 )
*v11 = v7;
v8 = (UINT8 *)HalpMap((LARGE_INTEGER)v7, (MEMORY_CACHING_TYPE)v4, 1u);
v6 = v8;
if( v8 )
{
if( Src )
{
memmove(v8, (UINT8 *)Src, v4 << 12);
}
else
{
memset((INT64)v8, 0i64);
Src = v6;
}
if( (_DWORD)v4 )
{
while( 1 )
{
LODWORD(v10) = v3;
if( (int)HalpBlkAddVirtualMapping(HalpBlkRootPageTablePa, v7, (UINT64)Src, 1i64, v10) < 0 )
break;
v7 += 4096i64;
Src = (char *)Src + 4096;
LODWORD(v4) = v4 - 1;
if( !(_DWORD)v4 )
return(INT64)v6;
}
return 0i64;
}
}
}
return(INT64)v6;
}Referenced by:
HalpBlkAllocateShadowCodePages
HalpBlkAllocateShadowData