EnlistKeyBodyWithKCB
VOID __stdcall EnlistKeyBodyWithKCB(_CM_KEY_BODY *KeyBody, UINT64 ControlFlags){
_LIST_ENTRY *p_KeyBodyList;
int v3;
_LIST_ENTRY *v4;
_LIST_ENTRY *v5;
p_KeyBodyList = &KeyBody->KeyBodyList;
KeyBody->KeyBodyList.Blink = &KeyBody->KeyBodyList;
v3 = 0;
KeyBody->KeyBodyList.Flink = &KeyBody->KeyBodyList;
while( _InterlockedCompareExchange64(
(volatile signed __int64 *)&KeyBody->KeyControlBlock->KeyBodyArray[v3],
(signed __int64)KeyBody,
0i64) )
{
if( (unsigned int)++v3 >= 4 )
{
if( (ControlFlags & 2) != 0 )
{
v4 = (_LIST_ENTRY *)KeyBody->KeyControlBlock->gap78;
v5 = *(_LIST_ENTRY **)&KeyBody->KeyControlBlock->gap78[8];
if( v5->Flink != v4 )
__fastfail(3u);
p_KeyBodyList->Flink = v4;
p_KeyBodyList->Blink = v5;
v5->Flink = p_KeyBodyList;
v4->Blink = p_KeyBodyList;
}
return;
}
}
}Referenced by:
CmRenameKey
CmpCreateRegistryRoot