IopReleaseFilteredBootResources
VOID __stdcall IopReleaseFilteredBootResources(PNP_RESOURCE_REQUEST *AssignTable, PNP_RESOURCE_REQUEST *AssignTableEnd){
int v2;
PNP_RESOURCE_REQUEST *v3;
_DWORD *v5;
__int64 v6;
_DEVICE_NODE *v7;
int v8;
_DWORD *v9;
int v10;
if( AssignTable < AssignTableEnd )
{
v2 = 0;
v3 = AssignTable + 10;
do
{
if( (*(v3 - 8) & 0x28) == 0 )
{
if( !v3[4] && *(v3 - 7) == 4 )
{
v5 = *(_DWORD **)v3;
if( *(_QWORD *)v3 )
{
v10 = 0;
v6 = *((_QWORD *)v3 - 5);
if( v6 )
v7 = *(_DEVICE_NODE **)(*(_QWORD *)(v6 + 312) + 40i64);
else
v7 = 0i64;
if( (unsigned int)PnpNeedToReleaseBootResources((__int64)v7, v5, &v10) )
{
v2 = 1;
v8 = PnpReleaseBootResourcesForFilteredRequirements((__int64 *)v3 - 5);
PipClearDevNodeFlags(v7, 0x80ui64);
if( v8 < 0 )
{
v9 = *(_DWORD **)v3;
*(v3 - 8) = 16;
v3[4] = v8;
ExFreePoolWithTag(v9, 0);
*(_QWORD *)v3 = 0i64;
}
v7->ResourceList = 0i64;
}
else if( v10 )
{
v2 = 1;
}
}
}
if( ((*(v3 - 8) & 0x10) != 0 || !*(_QWORD *)v3) && v3[4] != -1073739512 )
v3[4] = -1073741800;
}
v3 += 16;
}
while( v3 - 10 < AssignTableEnd );
if( v2 )
PnpRequestDeviceAction(0i64, 0, 0, 0i64, 0i64, 0i64, 0i64);
}
}Referenced by:
PnpAllocateResources