CmpLightWeightCommitSetValueKeyUoW
VOID __stdcall CmpLightWeightCommitSetValueKeyUoW(_CM_KCB_UOW *UoW, _LARGE_INTEGER *CommitTime){
INT64 v2;
UINT64 *PrepareDataPointer;
INT64 v5;
_CM_KEY_CONTROL_BLOCK *KeyControlBlock;
UINT64 KeyHive;
__int64 v9;
_CM_UOW_SET_VALUE_KEY_DATA *ValueData;
unsigned int NameLength;
unsigned int DataSize;
_CM_UOW_SET_VALUE_KEY_DATA *v13;
INT64 OldValueCell;
UINT64 v15;
_CM_KEY_CONTROL_BLOCK *v16;
unsigned int v17;
int v18;
int v19;
v18 = -1;
PrepareDataPointer = (UINT64 *)UoW->PrepareDataPointer;
v19 = 0;
v5 = v2;
KeyControlBlock = UoW->KeyControlBlock;
KeyHive = (UINT64)KeyControlBlock->KeyHash.KeyHive;
v9 = (*(__int64(__fastcall **)(UINT64, _QWORD, int *))(KeyHive + 8))(KeyHive, KeyControlBlock->KeyHash.KeyCell, &v18);
ValueData = UoW->ValueData;
NameLength = ValueData->NameLength;
if( *(_DWORD *)(v9 + 60) < NameLength )
{
*(_DWORD *)(v9 + 60) = NameLength;
UoW->KeyControlBlock->KcbMaxValueNameLen = UoW->ValueData->NameLength;
ValueData = UoW->ValueData;
}
DataSize = ValueData->DataSize;
if( *(_DWORD *)(v9 + 64) < DataSize )
{
*(_DWORD *)(v9 + 64) = DataSize;
UoW->KeyControlBlock->KcbMaxValueDataLen = UoW->ValueData->DataSize;
}
*(_LARGE_INTEGER *)(v9 + 4) = *CommitTime;
UoW->KeyControlBlock->KcbLastWriteTime = *CommitTime;
++UoW->KeyControlBlock->SequenceNumber;
v13 = UoW->ValueData;
OldValueCell = v13->OldValueCell;
if( (_DWORD)OldValueCell != -1 )
{
CmpFreeValue(KeyHive, OldValueCell);
v13 = UoW->ValueData;
}
CmpFreeTransientPoolWithTag(v13, 0x77554D43ui64);
UoW->ValueData = 0i64;
if( *(_DWORD *)PrepareDataPointer == 1 )
{
v15 = *(_QWORD *)(v9 + 36);
*(_QWORD *)(v9 + 36) = *(UINT64 *)((char *)PrepareDataPointer + 4);
*(UINT64 *)((char *)PrepareDataPointer + 4) = v15;
CmpCleanUpKcbCachedSymlink((INT64)UoW->KeyControlBlock, v5);
v16 = UoW->KeyControlBlock;
v17 = *(_DWORD *)(v9 + 40);
v16->ValueList.Count = *(_DWORD *)(v9 + 36);
v16->ValueList.List = v17;
}
CmpLightWeightCleanupSetValueKeyUoW(KeyHive, PrepareDataPointer);
UoW->PrepareDataPointer = 0i64;
(*(void(__fastcall **)(UINT64, int *))(KeyHive + 16))(KeyHive, &v18);
}Referenced by:
CmpProcessLightWeightUOW