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