HalpIrtReleaseDeviceAperture

VOID __stdcall HalpIrtReleaseDeviceAperture(INT64 a1, INT64 a2){
  int v2; 
  int v3; 
  void ***i; 
  bool v5; 
  void **v6; 
  void **v7; 
  __int64 v8; 

  v2 = a1;
  v3 = a2;
  ExAcquireFastMutex((PFAST_MUTEX)((char *)&CmpDummyThreadEvent + 7776));
  for( i = (void ***)*(&CmpDummyThreadEvent + 896); i != (void ***)((char *)&CmpDummyThreadEvent + 7168); i = (void ***)*i )
  {
    if( *((_DWORD *)i + 4) == v2 )
    {
      v5 = *((_DWORD *)i + 5) == v3;
      *((_DWORD *)i + 5) -= v3;
      if( v5 )
      {
        *((_DWORD *)i + 6) = 0;
        *((_DWORD *)i + 7) = 0;
        v6 = *i;
        if( (*i)[1] != i
          || (v7 = i[1], *v7 != i)
          || (*v7 = v6,
              v6[1] = v7,
              v8 = *(&CmpDummyThreadEvent + 966),
              *(_UNKNOWN **)(*(&CmpDummyThreadEvent + 966) + 8i64) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 7728)) )
        {
          __fastfail(3u);
        }
        *i = (void **)*(&CmpDummyThreadEvent + 966);
        i[1] = (void **)((char *)&CmpDummyThreadEvent + 7728);
        *(_QWORD *)(v8 + 8) = i;
        *(&CmpDummyThreadEvent + 966) = i;
      }
      break;
    }
  }
  KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&CmpDummyThreadEvent + 7776));
}

Referenced by:

HalpIrtAllocateIndex
HalpIrtFreeIndex