PspJobIoRateVolumeEntryRemoveAll

VOID __stdcall PspJobIoRateVolumeEntryRemoveAll(_EJOB *Job, _LIST_ENTRY *ListHead){
  INT64 *v2; 
  unsigned __int64 v4; 
  unsigned __int8 v5; 
  _RTL_BALANCED_NODE *v6; 
  unsigned __int64 v7; 
  char v8; 
  int v9; 
  _RTL_BALANCED_NODE *v10; 
  unsigned __int64 v11; 
  _RTL_BALANCED_NODE *v12; 
  unsigned __int64 v13; 

  v2 = (INT64 *)((char *)Job + 1456);
  v4 = (unsigned __int64)Job + 1464;
  v5 = ExAcquireSpinLockExclusive((INT64 *)Job + 182);
  v6 = *(_RTL_BALANCED_NODE **)v4;
  v7 = v5;
  if( (*(_BYTE *)(v4 + 8) & 1) != 0 && v6 )
    v6 = (_RTL_BALANCED_NODE *)(v4 ^ (unsigned __int64)v6);
  v8 = *(_BYTE *)(v4 + 8);
  v9 = v8 & 1;
  if( v6 )
  {
    while( 1 )
    {
      while( 1 )
      {
        while( v6->Children[0] )
        {
          v10 = v6;
          if( v9 )
            v6 = (_RTL_BALANCED_NODE *)((unsigned __int64)v6->Children[0] ^ (unsigned __int64)v6);
          else
            v6 = v6->Children[0];
          v10->Children[0] = 0i64;
        }
        v11 = (unsigned __int64)v6->Children[1];
        if( !v11 )
          break;
        v12 = v6;
        if( v9 )
          v6 = (_RTL_BALANCED_NODE *)(v11 ^ (unsigned __int64)v6);
        else
          v6 = v6->Children[1];
        v12->Children[1] = 0i64;
      }
      v13 = v6->ParentValue & 0xFFFFFFFFFFFFFFFCui64;
      if( v9 && v13 )
        v13 ^= (unsigned __int64)v6;
      PspIoRateEntryVolumeDelete(v6, ListHead);
      if( !v13 )
        break;
      v6 = (_RTL_BALANCED_NODE *)v13;
    }
    v8 = *(_BYTE *)(v4 + 8);
  }
  *(_QWORD *)v4 = 0i64;
  *(_QWORD *)(v4 + 8) = 0i64;
  if( (v8 & 1) != 0 )
    *(_BYTE *)(v4 + 8) = 1;
  ExReleaseSpinLockExclusiveFromDpcLevel(v2);
  __writecr8(v7);
}

Referenced by:

PspJobIoRateControlDisable