HalpIommuDmarPageTableMarkHiberPhase
NTSTATUS __stdcall HalpIommuDmarPageTableMarkHiberPhase(PVOID MemoryMap){
__int64 v1;
__int64 v2;
unsigned __int64 v3;
unsigned __int64 v4;
int v5;
__int64 v6;
__int64 v7;
unsigned __int64 v8;
unsigned int v9;
unsigned __int64 v10;
unsigned __int64 v11;
__int64 v13;
__int64 v14;
unsigned int v15;
unsigned __int64 v16;
__int64 v17;
unsigned int v18;
__int64 v19;
int v20;
unsigned int v21;
unsigned int v22;
__int64 v23;
__int64 v24;
UINT64 Tag;
__int128 v27[3];
v5 = *(_DWORD *)(v2 + 28);
v6 = v2;
LODWORD(v7) = 0;
v8 = *(_QWORD *)(v2 + 16);
v9 = 0;
v10 = v4;
v11 = v3;
v27[0] = v8;
memset(&v27[1], 0, 32);
if( v4 )
{
while( 1 )
{
v13 = (unsigned int)(*(_DWORD *)(v6 + 24) - 1);
if( (unsigned int)v7 < (unsigned int)v13 )
break;
LABEL_9:
v18 = *(_DWORD *)(v6 + 4i64 * (unsigned int)v7 + 36);
if( v18 < 0x40 )
v19 = (1i64 << v18) - 1;
else
LODWORD(v19) = -1;
v20 = v19 & (v11 >> *(_DWORD *)(v6 + 4i64 * (unsigned int)v7 + 60));
LODWORD(Tag) = 1953259880;
v21 = (1 << *(_DWORD *)(v6 + 4 * v13 + 36)) - v20;
if( (unsigned int)v10 - v9 <= v21 )
v21 = v10 - v9;
v22 = v21;
PoSetHiberRange(MemoryMap, 2ui64, (VOID *)(v8 + (unsigned int)(v20 << v5)), v21 << v5, Tag);
v9 += v22;
if( (_DWORD)v7 )
{
do
{
v23 = (unsigned int)(v7 - 1);
v24 = 1i64 << *(_DWORD *)(v6 + 4 * v23 + 60);
if( (v24 & (v11 + ((unsigned __int64)v22 << 12))) == (v24 & v11) )
break;
LODWORD(v7) = v7 - 1;
}
while( (_DWORD)v23 );
}
v11 += (unsigned __int64)v22 << 12;
v8 = *((_QWORD *)v27 + (unsigned int)v7);
LODWORD(v1) = v9;
if( v9 >= v10 )
return v1;
}
v14 = (unsigned int)v7;
while( 1 )
{
v15 = *(_DWORD *)(v6 + 4 * v14 + 36);
v16 = v8 + (1 << v15 << v5);
if( v15 < 0x40 )
v17 = (1i64 << v15) - 1;
else
LODWORD(v17) = -1;
v1 = (unsigned int)v17 & (unsigned int)(v11 >> *(_DWORD *)(v6 + 4 * v14 + 60));
v8 = *(_QWORD *)(v16 + 8 * v1);
if( !v8 )
break;
v7 = (unsigned int)(v7 + 1);
v14 = (unsigned int)v7;
*((_QWORD *)v27 + v7) = v8;
if( (unsigned int)v7 >= (unsigned int)v13 )
goto LABEL_9;
}
}
return v1;
}Referenced by:
HalpDmaMarkHiberAdapter