CmpDiscardKcb
INT64 __fastcall CmpDiscardKcb(UINT64 a1, INT64 a2){
_QWORD *v2;
_CMHIVE *v4;
__int64 v5;
__int64 v6;
unsigned __int64 v7;
__int64 v9;
__int64 v10;
_CM_KEY_CONTROL_BLOCK *v11;
_QWORD *v12;
v2 = *(_QWORD **)(a1 + 192);
if( v2 )
{
v9 = v2[3];
if( v9 )
{
v10 = *v2;
v11 = *(_CM_KEY_CONTROL_BLOCK **)(v9 + 16);
if( *(_QWORD **)(*v2 + 8i64) != v2 || (v12 = (_QWORD *)v2[1], (_QWORD *)*v12 != v2) )
__fastfail(3u);
*v12 = v10;
*(_QWORD *)(v10 + 8) = v12;
*(_QWORD *)(*(_QWORD *)(a1 + 192) + 24i64) = 0i64;
CmpDelayDerefKeyControlBlock(v11);
}
}
v4 = *(_CMHIVE **)(a1 + 32);
++*(_QWORD *)(a1 + 304);
*(_DWORD *)(a1 + 8) |= 0x20000u;
*(_WORD *)(a1 + 66) = 0;
CmpRemoveKeyHash(v4, (_CM_KEY_HASH *)(a1 + 16));
CmpLockDeletedHashEntryExclusiveByKcb(a1);
v5 = *(_QWORD *)(a1 + 32);
v6 = *(_QWORD *)(v5 + 1656);
v7 = 3
* ((unsigned int)(*(_DWORD *)(v5 + 1664) - 1) & ((unsigned int)(101027
* (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9))) ^ ((unsigned __int64)(unsigned int)(101027 * (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9))) >> 9)));
*(_QWORD *)(a1 + 24) = *(_QWORD *)(v6
+ 24
* ((unsigned int)(*(_DWORD *)(v5 + 1664) - 1) & ((unsigned int)(101027
* (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9))) ^ ((unsigned __int64)(unsigned int)(101027 * (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9))) >> 9)))
+ 16);
*(_QWORD *)(v6 + 8 * v7 + 16) = a1 + 16;
return CmpUnlockDeletedHashEntryByKcb(a1);
}Referenced by:
CmDeleteLayeredKey
CmRenameKey
CmpCommitDeleteKeyUoW
CmpCommitDiscardReplacePost
CmpCommitRenameKeyUoW
CmpCompleteUnloadKey
CmpInvalidateAllHigherLayerKcbsPostCallback
CmpInvalidateSubtreeWorker
CmpLightWeightCommitDeleteKeyUoW
CmpLightWeightCommitRenameKeyUoW
CmpRefreshWorkerRoutine
CmpRemoveHiveFromNamespace
CmpTransMgrFreeVolatileData