IopReleaseFilteredBootResources
VOID __fastcall IopReleaseFilteredBootResources(UINT64 a1, UINT64 a2){
int v2;
UINT64 v3;
_DWORD *v5;
__int64 v6;
__int64 v7;
int v8;
_DWORD *v9;
int v10;
if( a1 < a2 )
{
v2 = 0;
v3 = a1 + 40;
do
{
if( (*(_DWORD *)(v3 - 32) & 0x28) == 0 )
{
if( !*(_DWORD *)(v3 + 16) && *(_DWORD *)(v3 - 28) == 4 )
{
v5 = *(_DWORD **)v3;
if( *(_QWORD *)v3 )
{
v10 = 0;
v6 = *(_QWORD *)(v3 - 40);
if( v6 )
v7 = *(_QWORD *)(*(_QWORD *)(v6 + 312) + 40i64);
else
v7 = 0i64;
if( (unsigned int)PnpNeedToReleaseBootResources(v7, v5, &v10) )
{
v2 = 1;
v8 = PnpReleaseBootResourcesForFilteredRequirements((INT64 *)(v3 - 40));
PipClearDevNodeFlags((_DEVICE_NODE *)v7, 0x80ui64);
if( v8 < 0 )
{
v9 = *(_DWORD **)v3;
*(_DWORD *)(v3 - 32) = 16;
*(_DWORD *)(v3 + 16) = v8;
ExFreePoolWithTag(v9, 0);
*(_QWORD *)v3 = 0i64;
}
*(_QWORD *)(v7 + 416) = 0i64;
}
else if( v10 )
{
v2 = 1;
}
}
}
if( ((*(_DWORD *)(v3 - 32) & 0x10) != 0 || !*(_QWORD *)v3) && *(_DWORD *)(v3 + 16) != -1073739512 )
*(_DWORD *)(v3 + 16) = -1073741800;
}
v3 += 64i64;
}
while( v3 - 40 < a2 );
if( v2 )
PnpRequestDeviceAction(0i64, AssignResources, 0, 0i64, 0i64, 0i64);
}
}Referenced by:
PnpAllocateResources