PopCloneRange

VOID __stdcall PopCloneRange(_POP_HIBER_CONTEXT *HiberContext, UINT64 StartPage, UINT64 PageCount, UINT64 Tag){
  int v5; 
  UINT64 v7; 
  VOID **p_Flink; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v10; 
  _LIST_ENTRY *v11; 
  UINT64 Blink; 
  _LIST_ENTRY *v13; 
  _LIST_ENTRY *v14; 
  _LIST_ENTRY *v15; 
  _LIST_ENTRY *v16; 

  v5 = Tag;
  v7 = StartPage;
  RtlSetBits(&HiberContext->DiscardMap, StartPage, PageCount);
  p_Flink = 0i64;
  Flink = HiberContext->ClonedRanges.Flink;
  v10 = (_LIST_ENTRY *)(v7 + PageCount);
  if( Flink == &HiberContext->ClonedRanges )
    goto LABEL_13;
  while( 1 )
  {
    v11 = Flink;
    Flink = Flink->Flink;
    Blink = (UINT64)v11[1].Blink;
    if( (v7 < Blink || (_LIST_ENTRY *)v7 > v11[2].Flink) && ((unsigned __int64)v10 < Blink || v10 > v11[2].Flink) )
    {
      if( v7 > Blink )
        goto LABEL_7;
      if( Blink > (unsigned __int64)v10 )
        break;
    }
    if( v7 <= Blink )
      Blink = v7;
    v7 = Blink;
    v14 = v11[2].Flink;
    if( v10 >= v14 )
      v14 = v10;
    --HiberContext->ClonedRangeCount;
    v15 = v11->Flink;
    v10 = v14;
    if( v11->Flink->Blink != v11 )
      goto LABEL_25;
    v16 = v11->Blink;
    if( v16->Flink != v11 )
      goto LABEL_25;
    v16->Flink = v15;
    v15->Blink = v16;
    if( p_Flink )
      ExFreePoolWithTag(v11, 0x70616D48u);
    else
      p_Flink = (VOID **)&v11->Flink;
LABEL_7:
    if( Flink == &HiberContext->ClonedRanges )
      goto LABEL_12;
  }
  if( v7 >= Blink )
    goto LABEL_7;
  Flink = Flink->Blink;
LABEL_12:
  if( p_Flink )
  {
LABEL_14:
    *p_Flink = 0i64;
    p_Flink[1] = 0i64;
    *((_DWORD *)p_Flink + 5) = 0;
    p_Flink[5] = 0i64;
    *((_DWORD *)p_Flink + 4) = v5;
    p_Flink[3] = (VOID *)v7;
    p_Flink[4] = v10;
    v13 = Flink->Blink;
    if( v13->Flink != Flink )
LABEL_25:
      __fastfail(3u);
    *p_Flink = Flink;
    p_Flink[1] = v13;
    v13->Flink = (_LIST_ENTRY *)p_Flink;
    Flink->Blink = (_LIST_ENTRY *)p_Flink;
    ++HiberContext->ClonedRangeCount;
  }
  else
  {
LABEL_13:
    p_Flink = ExAllocatePoolWithTag(0x200ui64, 0x30ui64, 1885433160i64);
    if( p_Flink )
      goto LABEL_14;
    if( HiberContext->Status >= 0 )
      HiberContext->Status = -1073741670;
  }
}

Referenced by:

PopSetRange