CmpMarkCurrentValueDirty

WCHAR __stdcall CmpMarkCurrentValueDirty(WCHAR SourceCharacter){
  __int64 v1; 
  UINT64 v2; 
  _CM_KEY_NODE *v3; 
  unsigned int ValueByName; 
  UINT Cell; 
  int v7; 
  int v8; 
  v7 = -1;
  v2 = SourceCharacter;
  v8 = 0;
  v3 = (_CM_KEY_NODE *)(*(__int64(__fastcall **)(WCHAR, __int64, int *))(SourceCharacter + 8i64))(
                         SourceCharacter,
                         v1,
                         &v7);
  if( v3 )
  {
    Cell = 0;
    CmpFindSubKeyByNameWithStatus((_HHIVE *)v2, v3, &CmpSelectString, &Cell);
    LOWORD(v3) = (*(__int64(__fastcall **)(UINT64, int *))(v2 + 16))(v2, &v7);
    if( Cell != -1 )
    {
      v3 = (_CM_KEY_NODE *)(*(__int64(__fastcall **)(UINT64, _QWORD, int *))(v2 + 8))(v2, Cell, &v7);
      if( v3 )
      {
        ValueByName = CmpFindValueByName((_HHIVE *)v2, v3, (_UNICODE_STRING *)&CmpCurrentString);
        LOWORD(v3) = (*(__int64(__fastcall **)(UINT64, int *))(v2 + 16))(v2, &v7);
        if( ValueByName != -1 )
          LOBYTE(v3) = HvpMarkCellDirty(v2, ValueByName, 0);
      }
    }
  }
  return(unsigned __int16)v3;
}

Referenced by:

CmpLoadHiveThread