ArbRetestAllocation

INT64 __fastcall ArbRetestAllocation(_ARBITER_INSTANCE *Arbiter, _ARBITER_RETEST_ALLOCATION_PARAMETERS *Parameters){
  _CM_PARTIAL_RESOURCE_DESCRIPTOR *AllocateFrom; 
  int v5; 
  _LIST_ENTRY *i; 
  _LIST_ENTRY *j; 
  int(__fastcall *PreprocessEntry)(_ARBITER_INSTANCE *, _ARBITER_ALLOCATION_STATE *); 
  __int64 v10; 
  INT64 result[6]; 
  int v12; 
  __int64 *v13; 
  __int16 v14; 
  PVOID P; 
  __int64 v16[8]; 
  v10 = 0i64;
  memset((INT64)result, 0i64);
  memset((INT64)v16, 0i64);
  AllocateFrom = Parameters->AllocateFrom;
  v13 = v16;
  v12 = 1;
  result[5] = (INT64)v16;
  v14 = 1;
  if( AllocateFrom )
  {
    v5 = Arbiter->InitializeRangeList(Arbiter, Parameters->AllocateFromCount, AllocateFrom, Arbiter->PossibleAllocation);
    if( v5 >= 0 )
      goto LABEL_8;
LABEL_17:
    RtlFreeRangeList((INT64)Arbiter->PossibleAllocation);
    return(unsigned int)v5;
  }
  v5 = RtlCopyRangeList(Arbiter->PossibleAllocation, Arbiter->Allocation);
  if( v5 < 0 )
    goto LABEL_17;
  for( i = Parameters->ArbitrationList->Flink; Parameters->ArbitrationList != i; i = i->Flink )
  {
    v5 = RtlDeleteOwnersRanges(Arbiter->PossibleAllocation, i[2].Flink);
    if( v5 < 0 )
      goto LABEL_17;
  }
LABEL_8:
  for( j = Parameters->ArbitrationList->Flink; Parameters->ArbitrationList != j; j = j->Flink )
  {
    P = 0i64;
    result[4] = (INT64)j;
    v5 = ArbpBuildAlternative(Arbiter, (_IO_RESOURCE_DESCRIPTOR *)j[5].Flink, (_ARBITER_ALTERNATIVE *)v16);
    if( LODWORD(j[5].Blink) != 2 )
    {
      Arbiter->UnpackResource(
        (_CM_PARTIAL_RESOURCE_DESCRIPTOR *)j[4].Blink,
        (unsigned __int64 *)result,
        (unsigned __int64 *)&v10);
      PreprocessEntry = Arbiter->PreprocessEntry;
      result[1] = result[0] - 1 + v10;
      v5 = PreprocessEntry(Arbiter, (_ARBITER_ALLOCATION_STATE *)result);
      if( v5 < 0 )
        goto LABEL_17;
      if( v10 )
        Arbiter->AddAllocation(Arbiter, (_ARBITER_ALLOCATION_STATE *)result);
      if( (v14 & 0x10) != 0 )
      {
        ExFreePoolWithTag(P, 0);
        v14 &= ~0x10u;
      }
    }
  }
  return(unsigned int)v5;
}

Referenced by:

No references.