CmpUnlockKcb

void __fastcall CmpUnlockKcb(_CM_KEY_CONTROL_BLOCK *Kcb){
  __int32 v2; 

  v2 = Kcb->_bf_8 & 0x80000;
  if( (struct _KTHREAD *)Kcb->Owner == KeGetCurrentThread() )
    Kcb->Owner = 0i64;
  else
    _InterlockedDecrement((volatile signed __int32 *)&Kcb->56);
  ExReleasePushLockEx((_DWORD)Kcb + 48, 0);
  if( v2 )
  {
    if( (Kcb->_bf_8 & 0x80000) != 0 )
      CmpFreeKeyControlBlock((UINT64)Kcb);
  }
}

Referenced by:

CmDumpKey
CmKeyBodyNeedsVirtualImage
CmKeyBodyRemapToVirtual
CmKeyBodyRemapToVirtualForEnum
CmKeyBodyReplicateToVirtual
CmLockKeyForWrite
CmQueryKey
CmQueryMultipleValueKey
CmRestoreKey
CmpCloseKeyObject
CmpCreateKeyBody
CmpCreateKeyControlBlock
CmpCreateRegistryRoot
CmpDelayCloseWorker
CmpDeleteKeyObject
CmpDereferenceKeyControlBlock
CmpDoParseKey
CmpDoQueryKeyName
CmpDrainDelayDerefContext
CmpEnumerateAllHigherLayerKcbs
CmpFindSubkeyInHashByChildCell
CmpGetSymbolicLinkTarget
CmpGlobalUnlockKeyForWrite
CmpPerformCompleteKcbCacheLookup
CmpReferenceKeyControlBlockLockNotHeld
CmpRefreshHive
CmpRemoveHiveFromNamespace
CmpReplicateKeyToVirtual
CmpResolveHiveLoadConflict
CmpSearchKeyControlBlockTreeEx
CmpTransMgrCommitUoW
CmpTransMgrFreeVolatileData
CmpUnlockTwoKcbs
CmpVEExecuteOpenLogic
NtFlushKey
NtNotifyChangeMultipleKeys