KiAbFindWakeupLockEntry

__m128i *__fastcall KiAbFindWakeupLockEntry(unsigned __int64 a1, __int64 a2){
  __int64 v2; 
  unsigned __int64 v4; 
  int SessionId; 
  int v6; 
  __int64 v8; 
  __m128i *v9; 
  int v10; 
  __int128 v11; 
  unsigned __int8 v12; 
  __int64 v13; 
  __int128 v15; 
  unsigned __int8 v16; 
  v2 = 0i64;
  if( (*(_BYTE *)(a2 + 792) | *(_BYTE *)(a2 + 870)) == 63 )
    return 0i64;
  v4 = a1 & 0x7FFFFFFFFFFFFFFCi64;
  if( (unsigned int)MmIsSessionAddress((PVOID)a1) )
    SessionId = MmGetSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
  else
    SessionId = -1;
  v6 = (*(char *)(a2 + 792) | *(char *)(a2 + 870)) ^ 0x3F;
  while( _BitScanReverse((unsigned int *)&v8, v6) )
  {
    v9 = (__m128i *)(*(_QWORD *)(a2 + 800) + 96 * v8);
    v6 &= ~(1 << v8);
    if( (v9[2].m128i_i64[0] & 0x7FFFFFFFFFFFFFFCi64) == v4 )
    {
      *(_QWORD *)&v11 = v9[2].m128i_i64[0];
      *((_QWORD *)&v11 + 1) = _mm_srli_si128(v9[2], 8).m128i_u64[0];
      v12 = _InterlockedCompareExchange128(v9[2].m128i_i64, *((signed __int64 *)&v11 + 1), v11, (signed __int64 *)&v11);
      v10 = DWORD2(v11);
      v13 = v11;
      if( v12
        || (*(_QWORD *)&v15 = v9[2].m128i_i64[0],
            *((_QWORD *)&v15 + 1) = _mm_srli_si128(v9[2], 8).m128i_u64[0],
            v16 = _InterlockedCompareExchange128(
                    v9[2].m128i_i64,
                    *((signed __int64 *)&v15 + 1),
                    v15,
                    (signed __int64 *)&v15),
            v10 = DWORD2(v15),
            v13 = v15,
            v16) )
      {
        if( (v9[1].m128i_i8[9] & 1) != 0 && (v13 & 0x7FFFFFFFFFFFFFFCi64) == v4 && v10 == SessionId )
          return v9;
      }
    }
  }
  return(__m128i *)v2;
}

Referenced by:

KeAbPreWakeupThread