HalpDmaMarkHiberAdapter
VOID __stdcall HalpDmaMarkHiberAdapter(){
void *v0;
void *v1;
__int64 j;
__int64 v3;
unsigned int *v4;
_QWORD **v5;
_QWORD *v6;
unsigned int v7;
unsigned int i;
_QWORD *v9;
__int64 v10;
unsigned int k;
unsigned int v12;
_QWORD *v13;
__int64 v14;
_MDL *MapRegisterMdl;
__int64 *m;
__int64 v17;
__int64 *v18;
__int64 *v19;
_QWORD *v20;
unsigned int v21;
unsigned int *v22;
INT64 n;
unsigned int ii;
__int64 v25;
__int64 v26;
VOID *v27;
UINT64 Tag;
UINT64 Taga;
__int64 v30;
__int64 v31;
v1 = v0;
if( v0 )
{
if( HalpDmaHibernateAdapter )
{
for( i = 0; i < HalpDmaHibernateRegisterSetIndex; ++i )
{
v9 = (_QWORD *)*((_QWORD *)&HalpDmaHibernateRegisterSets + 2 * i);
v10 = *((unsigned int *)&HalpDmaHibernateRegisterSets + 4 * i + 2);
if( HalpDmaHibernateAdapter->TranslationType && !byte_140C49B2C )
HalpIommuDmarPageTableMarkHiberPhase(v1);
if( (_DWORD)v10 )
{
do
{
LODWORD(Tag) = 1953259880;
PoSetHiberRange(v1, 2ui64, v9, 0x48ui64, Tag);
v9 = (_QWORD *)v9[1];
--v10;
}
while( v10 );
}
}
}
for( j = HalpDmaHibernateAdapters; (__int64 *)j != &HalpDmaHibernateAdapters; j = *(_QWORD *)j )
{
v3 = 2i64;
v4 = (unsigned int *)(j - 16);
v30 = 2i64;
v5 = (_QWORD **)(j - 32);
do
{
v6 = *v5;
if( *(_DWORD *)(j + 232) && !byte_140C49B2C )
{
HalpIommuDmarPageTableMarkHiberPhase(v1);
v3 = v30;
}
v7 = 0;
if( *v4 )
{
do
{
LODWORD(Tag) = 1953259880;
PoSetHiberRange(v1, 2ui64, v6, 0x48ui64, Tag);
v6 = (_QWORD *)v6[1];
++v7;
}
while( v7 < *v4 );
v3 = v30;
}
++v5;
++v4;
v30 = --v3;
}
while( v3 );
}
}
else
{
if( HalpDmaHibernateAdapter )
{
LODWORD(Tag) = 0;
PoSetHiberRange(0i64, 0x10000ui64, HalpDmaHibernateAdapter, 0x280ui64, Tag);
for( k = 0; k < HalpDmaHibernateRegisterSetIndex; ++k )
{
v12 = *((_DWORD *)&HalpDmaHibernateRegisterSets + 4 * k + 2);
v13 = (_QWORD *)*((_QWORD *)&HalpDmaHibernateRegisterSets + 2 * k);
if( v12 )
{
v14 = v12;
do
{
LODWORD(Tag) = 1953259880;
PoSetHiberRange(0i64, 0x14000ui64, (VOID *)(*v13 >> 12), 1ui64, Tag);
v13 = (_QWORD *)v13[1];
--v14;
}
while( v14 );
}
}
MapRegisterMdl = HalpDmaHibernateAdapter->MapRegisterMdl;
if( MapRegisterMdl )
{
LODWORD(Tag) = 1953259880;
PoSetHiberRange(
0i64,
0x10000ui64,
MapRegisterMdl,
8 * (((unsigned __int64)MapRegisterMdl->ByteCount + 4095) >> 12) + 48,
Tag);
}
}
LODWORD(Tag) = 0;
PoSetHiberRange(0i64, 0x10000ui64, &HalpDmaHibernateAdapters, 0x10ui64, Tag);
for( m = (__int64 *)HalpDmaHibernateAdapters; m != &HalpDmaHibernateAdapters; m = (__int64 *)*m )
{
LODWORD(Taga) = 0;
PoSetHiberRange(0i64, 0x10000ui64, m - 35, 0x280ui64, Taga);
v17 = 2i64;
v18 = m - 2;
v31 = 2i64;
v19 = m - 4;
do
{
v20 = (_QWORD *)*v19;
v21 = 0;
if( *(_DWORD *)v18 )
{
do
{
LODWORD(Taga) = 1953259880;
PoSetHiberRange(0i64, 0x14000ui64, (VOID *)(*v20 >> 12), 1ui64, Taga);
v20 = (_QWORD *)v20[1];
++v21;
}
while( v21 < *(_DWORD *)v18 );
v17 = v31;
}
++v19;
v18 = (__int64 *)((char *)v18 + 4);
v31 = --v17;
}
while( v17 );
v22 = (unsigned int *)m[2];
if( v22 )
{
LODWORD(Taga) = 1953259880;
PoSetHiberRange(0i64, 0x10000ui64, v22, 8 * (((unsigned __int64)v22[10] + 4095) >> 12) + 48, Taga);
}
}
for( n = qword_140C49B00; (INT64 *)n != &qword_140C49B00; n = *(_QWORD *)n )
{
for( ii = 0; ii < *(_DWORD *)(n + 44); ++ii )
{
v25 = *(_QWORD *)(n + 56);
v26 = 160i64 * ii;
v27 = *(VOID **)(v26 + v25 + 128);
if( v27 )
{
LODWORD(Taga) = 1164730696;
PoSetHiberRange(0i64, 0x10000ui64, v27, *(unsigned int *)(v26 + v25 + 120), Taga);
}
}
}
}
}Referenced by:
HaliLocateHiberRanges