CmSetLastWriteTimeKey

__int64 __fastcall CmSetLastWriteTimeKey(__int64 *a1, _QWORD *a2){
  INT64 v2; 
  INT64 v5; 
  char v6; 
  int started; 
  INT64 v8; 
  CM_TRANS *v9; 
  int v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  _CM_KCB_UOW *UnitOfWork; 
  INT64 v16; 
  INT64 v17[2]; 
  __int128 v18; 
  int v19; 
  INT64 v20[2]; 
  CM_TRANS *CmTrans; 
  _KAPC_STATE ApcState; 

  CmTrans = 0i64;
  v19 = 0;
  v2 = 0i64;
  v16 = 0xFFFFFFFFi64;
  *(_OWORD *)v17 = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  WORD1(v17[0]) = -1;
  v18 = 0i64;
  *(_OWORD *)v20 = 0i64;
  CmpAttachToRegistryProcess(&ApcState);
  while( (*(&CmpDummyThreadEvent + 1056) & 1) == 0 )
  {
    CmpLockRegistry();
    v5 = a1[1];
    v6 = 1;
    if( (*(_DWORD *)(*(_QWORD *)(v5 + 32) + 160i64) & 0x100000) != 0 )
    {
      started = -1073741790;
      goto LABEL_39;
    }
    started = CmpStartKcbStackForTopLayerKcb((INT64)v17, a1[1]);
    if( started < 0 )
      goto LABEL_39;
    CmpLockKcbStackTopExclusiveRestShared((INT64)v17);
    started = CmpPerformKeyBodyDeletionCheck((CM_KEY_BODY *)a1, 0i64);
    if( started < 0 )
      goto LABEL_36;
    if( *(_BYTE *)(v5 + 65) == 1 )
    {
      started = -1073741790;
      goto LABEL_36;
    }
    if( a1[7] || a1[8] )
    {
      started = CmpTransSearchAddTransFromKeyBody((_CM_KEY_BODY *)a1, &CmTrans);
      if( started < 0 )
        goto LABEL_36;
      v9 = CmTrans;
      started = CmpPerformKeyBodyDeletionCheck((CM_KEY_BODY *)a1, CmTrans);
      if( started < 0 )
        goto LABEL_36;
      if( (*(_DWORD *)(*(_QWORD *)(v5 + 32) + 160i64) & 2) != 0 )
      {
        started = -1072103423;
        goto LABEL_36;
      }
      if( v9 )
      {
        UnitOfWork = CmpAllocateUnitOfWork();
        v2 = (INT64)UnitOfWork;
        if( !UnitOfWork )
        {
          started = -1073741670;
LABEL_36:
          CmpUnlockKcbStack((INT64)v17);
          goto LABEL_39;
        }
        CmpTransEnlistUowInKcb((_CM_KCB_UOW *__ptr32)UnitOfWork, (_CM_KEY_CONTROL_BLOCK *__ptr32)v5);
        started = CmpTransEnlistUowInCmTrans((CM_KCB_UOW *)v2, v9);
        if( started >= 0 )
        {
          if( CmpLockIXLockIntent((UINT64 *)(v5 + 248), v2) && CmpLockIXLockExclusive(v5 + 264, v2, 1i64) )
          {
            *(_DWORD *)(v2 + 68) = 8;
            *(_QWORD *)(v2 + 88) = *a2;
            started = CmAddLogForAction((CM_KCB_UOW *)v2);
            if( started >= 0 )
            {
              started = 0;
              goto LABEL_36;
            }
          }
          else
          {
            started = -1072103423;
          }
        }
LABEL_32:
        if( v2 )
        {
          CmpRundownUnitOfWork((PVOID)v2);
          CmpFreeUnitOfWork((VOID *)v2);
        }
        goto LABEL_36;
      }
    }
    v10 = CmpTryAcquireKcbIXLocks(v5, 0, v8, (UINT64 *)v20);
    started = v10;
    if( v10 == -1073741267 )
    {
      CmpLogTransactionAbortedForRollbackPacket(v5, 2, (unsigned int *)v20, v11);
      CmpUnlockKcbStack((INT64)v17);
      CmpCleanupKcbStack((INT64)v17);
      *(_OWORD *)v17 = 0i64;
      WORD1(v17[0]) = -1;
      v18 = 0i64;
      CmpUnlockRegistry();
      v6 = 0;
      started = CmpAbortRollbackPacket((INT64)v20);
      if( started < 0 )
        goto LABEL_39;
      CmpRetryBackOff(&v19);
      CmpCleanupRollbackPacket((INT64)v20);
      *(_OWORD *)v20 = 0i64;
    }
    else
    {
      if( v10 < 0 )
        goto LABEL_36;
      if( *(_DWORD *)(v5 + 40) != -1 )
      {
        HvLockHiveFlusherShared(*(_QWORD *)(v5 + 32));
        if( HvMarkCellDirty(*(PVOID *)(v5 + 32), (PVOID)*(unsigned int *)(v5 + 40), 0) )
        {
          *(_QWORD *)(CmpGetKeyNodeForKcb(v5, (INT64)&v16, 1) + 4) = *a2;
          v12 = *a2;
          v13 = *(_QWORD *)(v5 + 32);
          ++*(_QWORD *)(v5 + 304);
          *(_QWORD *)(v5 + 168) = v12;
          (*(void(__fastcall **)(__int64, INT64 *))(v13 + 16))(v13, &v16);
          started = 0;
        }
        else
        {
          started = -1073741443;
        }
        HvUnlockHiveFlusherShared(*(_QWORD *)(v5 + 32));
        goto LABEL_32;
      }
      CmpUnlockKcbStack((INT64)v17);
      started = CmpPromoteKey((__int64)v17, 0, 0);
      if( started < 0 )
        goto LABEL_39;
      CmpUnlockRegistry();
      CmpCleanupKcbStack((INT64)v17);
      *(_OWORD *)v17 = 0i64;
      WORD1(v17[0]) = -1;
      v18 = 0i64;
    }
  }
  started = -1073741431;
  v6 = 0;
LABEL_39:
  CmpCleanupKcbStack((INT64)v17);
  CmpCleanupRollbackPacket((INT64)v20);
  if( v6 )
    CmpUnlockRegistry();
  CmpDetachFromRegistryProcess(&ApcState);
  return(unsigned int)started;
}

Referenced by:

NtSetInformationKey