CmpUnlockKcbStack
VOID __fastcall CmpUnlockKcbStack(INT64 a1){
__int16 i;
UINT64 v3;
bool v4;
for( i = 0; i <= *(__int16 *)(a1 + 2); ++i )
{
if( i >= 2 )
v3 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 8i64 * i - 16);
else
v3 = *(_QWORD *)(a1 + 8i64 * i + 8);
v4 = (*(_DWORD *)(v3 + 8) & 0x80000) != 0;
if( *(struct _KTHREAD **)(v3 + 56) == KeGetCurrentThread() )
*(_QWORD *)(v3 + 56) = 0i64;
else
_InterlockedDecrement((volatile signed __int32 *)(v3 + 56));
ExReleasePushLockEx(v3 + 48, 0);
if( v4 && (*(_DWORD *)(v3 + 8) & 0x80000) != 0 )
CmpFreeKeyControlBlock(v3);
}
}Referenced by:
CmCallbackGetKeyObjectID
CmCallbackGetKeyObjectIDEx
CmDeleteLayeredKey
CmDeleteValueKey
CmEnumerateValueFromLayeredKey
CmQueryLayeredKey
CmQueryMultipleValueForLayeredKey
CmSaveKey
CmSetKeyFlags
CmSetLastWriteTimeKey
CmSetValueKey
CmpAssignKeySecurity
CmpDoBuildVirtualStack
CmpDoParseKey
CmpEnumerateLayeredKey
CmpGetSymbolicLinkTarget
CmpPromoteKey
CmpQueryKeySecurity
CmpSetKeySecurity
CmpStartSiloRegistryNamespace