HalpBlkAddVirtualMapping
INT64 __fastcall HalpBlkAddVirtualMapping(INT64 PageTablePage, INT64 a2, UINT64 a3, INT64 a4, INT64 a5){
unsigned int v5;
int v6;
char v10;
int i;
UINT64 v12;
__int64 v13;
__int64 v14;
UINT64 v15;
UINT64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
v5 = 0;
v6 = a4;
v10 = 39;
for( i = 4; ; --i )
{
v12 = HalpRemapVirtualAddress64(HalpBlkPageTableVaWindow, PageTablePage, 0);
v15 = v12;
if( !v12 )
return(unsigned int)-1073741801;
v16 = (a3 >> v10) & 0x1FF;
if( i == (_DWORD)v13 )
break;
v17 = *(_QWORD *)(v12 + 8 * v16);
if( ((unsigned __int8)v17 & (unsigned __int8)v13) != 0 )
{
PageTablePage = v14 & v17;
}
else
{
PageTablePage = HalpBlkAllocatePageTablePage(0);
if( !PageTablePage )
return(unsigned int)-1073741801;
v18 = 0i64;
v19 = 1i64;
v20 = 2i64;
do
{
v18 |= v19++;
--v20;
}
while( v20 );
*(_QWORD *)(v15 + 8 * v16) = v18 ^ (PageTablePage ^ v18) & 0xFFFFFFFFF000i64;
}
v10 -= 9;
}
if( (_DWORD)a5 == 4 || (v21 = v13, (_DWORD)a5 == 64) )
v21 = 3i64;
if( (((_DWORD)a5 - 32) & 0xFFFFFFDF) != 0 )
v21 |= 0x8000000000000000ui64;
if( v6 != (_DWORD)v13 )
v21 |= 0x18ui64;
*(_QWORD *)(v12 + 8 * v16) = v21 | v14 & a2;
return v5;
}Referenced by:
HalpBlkAllocateAndShadowMemory
HalpBlkAllocateShadowCode
HalpBlkShadowApic
HalpBlkShadowStartupBlock