CmpLightWeightCommitAddKeyUoW
VOID __stdcall CmpLightWeightCommitAddKeyUoW(_CM_KCB_UOW *UoW, _LARGE_INTEGER *CommitTime){
_CM_KEY_CONTROL_BLOCK *KeyControlBlock;
UINT64 *PrepareDataPointer;
UINT64 KeyHive;
__int64 v7;
UINT64 v8;
__int64 v9;
unsigned __int16 v10;
unsigned int v11;
_CM_KEY_CONTROL_BLOCK *v12;
int v13;
int v14;
int v15;
int v16;
v16 = 0;
v14 = 0;
KeyControlBlock = UoW->KeyControlBlock;
PrepareDataPointer = (UINT64 *)UoW->PrepareDataPointer;
v15 = -1;
v13 = -1;
KeyHive = (UINT64)KeyControlBlock->KeyHash.KeyHive;
v7 = (*(__int64(__fastcall **)(UINT64, _QWORD, int *))(KeyHive + 8))(KeyHive, KeyControlBlock->KeyHash.KeyCell, &v15);
v8 = *(unsigned int *)(v7 + 44);
*(_DWORD *)(v7 + 16) = UoW->KeyControlBlock->ParentKcb->KeyHash.KeyCell;
CmpAssignSecurityToKcb((UINT64)UoW->KeyControlBlock, v8, 0i64, 0, 0);
++UoW->KeyControlBlock->SequenceNumber;
v9 = (*(__int64(__fastcall **)(UINT64, _QWORD, int *))(KeyHive + 8))(
KeyHive,
UoW->KeyControlBlock->ParentKcb->KeyHash.KeyCell,
&v13);
*(_LARGE_INTEGER *)(v9 + 4) = *CommitTime;
UoW->KeyControlBlock->ParentKcb->KcbLastWriteTime = *CommitTime;
++UoW->KeyControlBlock->ParentKcb->SequenceNumber;
v10 = 2 * *(_WORD *)(v7 + 72);
if( (*(_BYTE *)(v7 + 2) & 0x20) == 0 )
v10 = *(_WORD *)(v7 + 72);
if( (unsigned __int16)*(_DWORD *)(v9 + 52) < (unsigned int)v10 )
{
*(_WORD *)(v9 + 52) = v10;
UoW->KeyControlBlock->ParentKcb->KcbMaxNameLen = v10;
}
v11 = *(unsigned __int16 *)(v7 + 74);
if( *(_DWORD *)(v9 + 56) < v11 )
*(_DWORD *)(v9 + 56) = v11;
if( *(_DWORD *)PrepareDataPointer == 1 )
CmpLightWeightSwapParentSubKeyList(
KeyHive,
UoW->KeyControlBlock->ParentKcb->KeyHash.KeyCell,
(INT64)PrepareDataPointer);
(*(void(__fastcall **)(UINT64, int *))(KeyHive + 16))(KeyHive, &v13);
(*(void(__fastcall **)(UINT64, int *))(KeyHive + 16))(KeyHive, &v15);
CmpLightWeightCleanupModifyKeyDataUoW(KeyHive, PrepareDataPointer);
v12 = UoW->KeyControlBlock;
UoW->PrepareDataPointer = 0i64;
v12->TransKCBOwner = 0i64;
}Referenced by:
CmpProcessLightWeightUOW