PnpReleaseResourcesInternal
VOID __stdcall PnpReleaseResourcesInternal(_DEVICE_NODE *DeviceNode){
unsigned int *v2;
__int64 v3;
unsigned int v4;
unsigned int *v5;
unsigned int v6;
unsigned int v7;
unsigned int v8;
_QWORD *v9;
int v10;
_QWORD *v11;
_QWORD *i;
INT64 v13;
INT64 *v14;
__int64 *LegacyBusDeviceNode;
__int64 *v16;
unsigned int v17;
unsigned int *v18;
__int64 v19;
__int64 v20;
INT64 result;
INT64 *p_result;
int v23;
__int64 v24;
__int64 v25;
__int64 v26;
__int64 v27;
__int64 v28;
int v29;
unsigned int v30;
unsigned int v31;
memset((INT64)&result, 0i64);
v2 = (unsigned int *)*((_QWORD *)DeviceNode + 52);
v3 = 0i64;
p_result = &result;
v23 = 0;
result = (INT64)&result;
v25 = *((_QWORD *)DeviceNode + 4);
v24 = 0i64;
v26 = 4i64;
v27 = 0i64;
v28 = 0i64;
if( (v2 || (v2 = (unsigned int *)*((_QWORD *)DeviceNode + 68)) != 0i64) && (v4 = *v2) != 0 )
{
v5 = v2 + 1;
}
else
{
v4 = 1;
v2 = 0i64;
v5 = 0i64;
}
v31 = 0;
v6 = 0;
if( v4 )
{
while( v2 )
{
v7 = *v5;
v8 = v5[1];
v30 = v8;
if( *v5 == -1 )
goto LABEL_28;
LABEL_7:
if( DeviceNode == IopRootDeviceNode )
v9 = DeviceNode;
else
v9 = (_QWORD *)*((_QWORD *)DeviceNode + 2);
v10 = 1;
v29 = 1;
if( v9 )
{
do
{
if( v9 == IopRootDeviceNode && v10 )
{
LegacyBusDeviceNode = IopFindLegacyBusDeviceNode(v7, v8);
v9 = LegacyBusDeviceNode;
if( LegacyBusDeviceNode == v16 && !v7 )
v9 = IopFindLegacyBusDeviceNode(1u, 0);
v29 = v3;
}
v11 = v9 + 61;
for( i = (_QWORD *)v9[61]; i != v11; i = (_QWORD *)*i )
{
if( i[3] != v3 )
{
v29 = v3;
result = (INT64)(i + 5);
p_result = i + 5;
i[5] = &result;
i[6] = &result;
IopCallArbiter((INT64)i, 0i64, (INT64)(i + 5));
IopCallArbiter((INT64)i, 2i64, 0i64);
v13 = result;
v14 = p_result;
if( *(INT64 **)(result + 8) != &result || (INT64 *)*p_result != &result )
__fastfail(3u);
*p_result = result;
v3 = 0i64;
*(_QWORD *)(v13 + 8) = v14;
p_result = &result;
result = (INT64)&result;
v11 = v9 + 61;
}
}
v9 = (_QWORD *)v9[2];
v10 = v29;
v8 = v30;
}
while( v9 );
v6 = v31;
}
if( v4 > 1 )
{
v17 = v5[3];
v18 = v5 + 4;
if( v17 )
{
v19 = v17;
do
{
v20 = (unsigned int)v3;
if( *(_BYTE *)v18 == 5 )
v20 = v18[1];
v18 = (unsigned int *)((char *)v18 + v20 + 20);
--v19;
}
while( v19 );
}
v5 = v18;
}
v31 = ++v6;
if( v6 >= v4 )
goto LABEL_22;
}
v8 = v3;
v30 = v3;
LABEL_28:
v7 = 1;
goto LABEL_7;
}
LABEL_22:
IopWriteAllocatedResourcesToRegistry(DeviceNode, 0i64, 0);
}Referenced by:
IopReleaseResources
PnpReallocateResources