CmpUnlockHashEntryByKcb

INT64 __fastcall CmpUnlockHashEntryByKcb(INT64 a1){
  __int64 v1; 
  unsigned int v2; 
  __int64 v3; 
  unsigned int v4; 
  INT64 result; 

  v1 = *(_QWORD *)(a1 + 32);
  v2 = 101027 * (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9));
  *(_QWORD *)(*(_QWORD *)(v1 + 1640)
            + 24 * ((unsigned int)(*(_DWORD *)(v1 + 1648) - 1) & (v2 ^ ((unsigned __int64)v2 >> 9)))
            + 8) = 0i64;
  v3 = *(_QWORD *)(a1 + 32);
  v4 = 101027 * (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9));
  ExReleasePushLockEx(*(_DWORD *)(v3 + 1640) + 24 * ((*(_DWORD *)(v3 + 1648) - 1) & (v4 ^ (v4 >> 9))), 0);
  result = (unsigned int)_InterlockedExchangeAdd((volatile signed __int32 *)(v1 + 4272), 0xFFFFFFFF);
  if( (_DWORD)result == 1 )
    return CmpDeleteHive((PVOID)v1);
  return result;
}

Referenced by:

CmDeleteLayeredKey
CmpDoBuildVirtualStack
CmpDoParseKey
CmpGetSymbolicLinkTarget
CmpPerformCompleteKcbCacheLookup
CmpRemoveHiveFromNamespace
CmpTransMgrFreeVolatileData