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