PspJobIoRateVolumeEntryRemoveAll
VOID __stdcall PspJobIoRateVolumeEntryRemoveAll(_EJOB *Job, LIST_ENTRY *ListHead){
INT64 *p_IoControlStateLock;
_RTL_RB_TREE *p_VolumeIoControlTree;
KIRQL v5;
RTL_BALANCED_NODE *Root;
unsigned __int64 v7;
$7D93978C745EB1C2D28075BAF55422B4 v8;
int v9;
RTL_BALANCED_NODE *v10;
unsigned __int64 v11;
RTL_BALANCED_NODE *v12;
unsigned __int64 v13;
p_IoControlStateLock = (INT64 *)&Job->IoControlStateLock;
p_VolumeIoControlTree = &Job->VolumeIoControlTree;
v5 = ExAcquireSpinLockExclusive(&Job->IoControlStateLock);
Root = p_VolumeIoControlTree->Root;
v7 = v5;
if( (*(_BYTE *)&p_VolumeIoControlTree->0 & 1) != 0 && Root )
Root = (RTL_BALANCED_NODE *)((unsigned __int64)p_VolumeIoControlTree ^ (unsigned __int64)Root);
v8 = p_VolumeIoControlTree->0;
v9 = *(_BYTE *)&v8 & 1;
if( Root )
{
while( 1 )
{
while( 1 )
{
while( Root->Children[0] )
{
v10 = Root;
if( v9 )
Root = (RTL_BALANCED_NODE *)((unsigned __int64)Root->Children[0] ^ (unsigned __int64)Root);
else
Root = Root->Children[0];
v10->Children[0] = 0i64;
}
v11 = (unsigned __int64)Root->Children[1];
if( !v11 )
break;
v12 = Root;
if( v9 )
Root = (RTL_BALANCED_NODE *)(v11 ^ (unsigned __int64)Root);
else
Root = Root->Children[1];
v12->Children[1] = 0i64;
}
v13 = Root->ParentValue & 0xFFFFFFFFFFFFFFFCui64;
if( v9 && v13 )
v13 ^= (unsigned __int64)Root;
PspIoRateEntryVolumeDelete(Root, ListHead);
if( !v13 )
break;
Root = (RTL_BALANCED_NODE *)v13;
}
v8 = p_VolumeIoControlTree->0;
}
p_VolumeIoControlTree->Root = 0i64;
p_VolumeIoControlTree->Min = 0i64;
if( (*(_BYTE *)&v8 & 1) != 0 )
p_VolumeIoControlTree->0 = ($7D93978C745EB1C2D28075BAF55422B4)1;
ExReleaseSpinLockExclusiveFromDpcLevel(p_IoControlStateLock);
__writecr8(v7);
}Referenced by:
PspJobIoRateControlDisable