IopAllocateBootResourcesInternal

INT64 __stdcall IopAllocateBootResourcesInternal(
        ARBITER_REQUEST_SOURCE ArbiterRequestSource,
        DEVICE_OBJECT *DeviceObject,
        CM_RESOURCE_LIST *BootResources){
  CM_RESOURCE_LIST *v6; 
  __int64 v7; 
  IO_RESOURCE_REQUIREMENTS_LIST *v8; 
  IO_RESOURCE_REQUIREMENTS_LIST *v9; 
  int v10; 
  void *v11; 
  void *v13; 
  void *v14; 
  INT64 result; 
  ARBITER_REQUEST_SOURCE v16; 
  IO_RESOURCE_REQUIREMENTS_LIST *v17; 
  PVOID v18; 
  PVOID P; 
  __int64 v20; 
  int v21; 
  memset((INT64)&result, 0i64);
  if( DeviceObject )
    v7 = *(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64);
  else
    v7 = 0i64;
  v8 = PnpCmResourcesToIoResources(v6, (UINT64)BootResources, 1ui64);
  v9 = v8;
  if( v8 )
  {
    v16 = ArbiterRequestSource;
    v17 = v8;
    result = (INT64)DeviceObject;
    v10 = IopResourceRequirementsListToReqList((INT64)&result, (CHAR **)&v18);
    if( v10 >= 0 )
    {
      if( !v18 )
        goto LABEL_15;
      v10 = IopBootAllocation((__int64)v18);
      if( v10 >= 0 )
      {
        PipSetDevNodeFlags(v7, 128);
        PnpBuildCmResourceList();
        v10 = v21;
        if( v21 >= 0 )
        {
          if( *(_QWORD *)(v7 + 544) )
          {
            if( P )
            {
              ExFreePoolWithTag(P, 0);
              P = 0i64;
            }
          }
          else
          {
            *(_QWORD *)(v7 + 544) = P;
          }
          v11 = *(void **)(v7 + 552);
          if( v11 )
          {
            ExFreePoolWithTag(v11, 0);
            *(_QWORD *)(v7 + 552) = 0i64;
          }
          v10 = 0;
          *(_QWORD *)(v7 + 552) = v20;
        }
      }
    }
  }
  else
  {
    v10 = -1073741823;
  }
  if( v18 )
    IopFreeReqList(v18);
LABEL_15:
  if( v9 )
    ExFreePoolWithTag(v9, 0);
  if( v10 < 0 )
  {
    v13 = *(void **)(v7 + 544);
    if( v13 )
    {
      ExFreePoolWithTag(v13, 0);
      *(_QWORD *)(v7 + 544) = 0i64;
    }
    v14 = *(void **)(v7 + 552);
    if( v14 )
    {
      ExFreePoolWithTag(v14, 0);
      *(_QWORD *)(v7 + 552) = 0i64;
    }
  }
  return(unsigned int)v10;
}

Referenced by:

IopAllocateBootResources
IopReleaseResources