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