HvpMarkCellDirty

UINT8 __stdcall HvpMarkCellDirty(PVOID Hive, PVOID CellIndex, UINT8 LockHeld, _CM_HIVE_DIRTY_REASON Reason){
  unsigned __int64 v4; 
  int v6; 
  __int64 v9; 
  unsigned int *v10; 
  unsigned int v11; 
  unsigned int v12; 
  UINT8 v13; 
  int v15; 
  int v16; 

  v4 = (unsigned int)CellIndex;
  v16 = 0;
  v6 = *((_DWORD *)Hive + 40);
  v15 = -1;
  if( (v6 & 1) != 0 || (int)CellIndex < 0 )
    return 1;
  if( !LockHeld )
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)Hive + 10, 0i64);
  v9 = (*((__int64(__fastcall **)(PVOID, _QWORD, int *))Hive + 1))(Hive, (unsigned int)v4, &v15);
  if( !v9 || v9 == 4 )
  {
    if( !LockHeld )
    {
      if( (_InterlockedExchangeAdd64((volatile signed __int64 *)Hive + 10, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock((_EX_PUSH_LOCK *)Hive + 10);
      KeAbPostRelease((char *)Hive + 80);
    }
  }
  else
  {
    if( !HvpGetCellMap((_HHIVE *)Hive, (unsigned int)v4) )
      KeBugCheckEx(0x51u, (PVOID)1, Hive, (PVOID)v4, (PVOID)0x270);
    v11 = v4 - 4;
    v12 = *v10;
    if( (*v10 & 0x80000000) != 0 )
      v12 = -v12;
    (*((void(__fastcall **)(PVOID, int *))Hive + 2))(Hive, &v15);
    v13 = HvpMarkDirty((ULONG_PTR)Hive, v11, v12, Reason);
    if( !LockHeld )
    {
      if( (_InterlockedExchangeAdd64((volatile signed __int64 *)Hive + 10, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock((_EX_PUSH_LOCK *)Hive + 10);
      KeAbPostRelease((char *)Hive + 80);
    }
    if( v13 )
    {
      *((_BYTE *)Hive + 141) = 1;
      return 1;
    }
  }
  return 0;
}

Referenced by:

CmpCheckAndFixSecurityCellsRefcount
CmpCheckLeaf
CmpCheckValueList
CmpClearKeyAccessBits
CmpCopySyncTree2
CmpInsertSecurityCellList
CmpLightWeightPrepareSetKeyUserFlags
CmpMarkAllChildrenDirty
CmpMarkCurrentProfileDirty
CmpMarkCurrentValueDirty
CmpMarkEntireIndexDirty
CmpMarkIndexDirty
CmpMarkKeyDirty
CmpMarkKeyParentDirty
CmpMarkKeyValuesDirty
CmpMarkValueDataDirty
CmpPartialPromoteSingleKeyFromKeyNodeStacks
CmpRemoveSubKeyCellNoCellRef
CmpUpdateHiveRootCellFlags
CmpUpdateKeyNodeAccessBits
CmpVEExecuteOpenLogic
CmpValidateHiveSecurityDescriptors
HvMarkCellDirty
HvpFindFreeCellInBin
HvpIsFreeNeighbor