CmpAbortRollbackPacket

INT64 __fastcall CmpAbortRollbackPacket(INT64 a1){
  int v2; 
  unsigned int v3; 
  INT64 v5; 
  int v6; 
  v2 = 0;
  v3 = 0;
  if( *(_DWORD *)a1 )
  {
    while( 1 )
    {
      v5 = *(_QWORD *)(*(_QWORD *)(a1 + 8) + 8i64 * v3);
      if( v5 )
        break;
LABEL_16:
      if( ++v3 >= *(_DWORD *)a1 )
        return(unsigned int)v2;
    }
    if( (v5 & 1) != 0 )
    {
      v6 = CmpRollbackLightWeightTransaction(v5 & 0xFFFFFFFFFFFFFFFEui64);
      if( v6 < 0 )
        goto LABEL_10;
      CmpTransDereferenceTransaction(v5);
    }
    else
    {
      v6 = TmRollbackEnlistment(*(PKENLISTMENT *)(*(_QWORD *)(a1 + 8) + 8i64 * v3), 0i64);
      if( v6 < 0 )
        goto LABEL_10;
      HalPutDmaAdapter((PADAPTER_OBJECT)v5);
    }
    *(_QWORD *)(*(_QWORD *)(a1 + 8) + 8i64 * v3) = 0i64;
LABEL_10:
    if( ((v6 + 1072103405) & 0xFFFFFFFC) == 0 && v6 != -1072103404 )
      v6 = 0;
    if( v2 >= 0 && v6 < 0 )
      v2 = v6;
    goto LABEL_16;
  }
  return(unsigned int)v2;
}

Referenced by:

CmRenameKey
CmRestoreKey
CmSetKeyFlags
CmSetLastWriteTimeKey
CmpPerformUnloadKey
CmpSaveBootControlSet
CmpTryToRundownHive