PnpRestoreResourcesInternal
__int64 __fastcall PnpRestoreResourcesInternal(_DEVICE_NODE *DeviceNode){
_CM_RESOURCE_LIST *ResourceList;
VOID **v4;
NTSTATUS BestConfiguration;
__int64 v6;
_CM_RESOURCE_LIST *v7;
unsigned int v8;
_LIST_ENTRY ArbiterList;
PNP_RESOURCE_REQUEST Request[16];
char vars0;
ResourceList = DeviceNode->ResourceList;
ArbiterList = 0i64;
if( !ResourceList )
return 0i64;
v4 = PnpCmResourcesToIoResources((__int64)DeviceNode, ResourceList, 0);
if( !v4 )
return 3221225626i64;
memset(Request, 0i64, sizeof(Request));
*(_QWORD *)Request = DeviceNode->PhysicalDeviceObject;
*(_QWORD *)&Request[6] = v4;
Request[3] = 4;
BestConfiguration = IopResourceRequirementsListToReqList(Request, (VOID **)&Request[8]);
if( BestConfiguration >= 0 && (v6 = *(_QWORD *)&Request[8]) != 0 )
{
IopRearrangeReqList(*(_REQ_LIST **)&Request[8]);
if( !*(_QWORD *)(v6 + 24) )
{
PnpFreeResourceRequirementsForAssignTable((unsigned __int64)Request, (unsigned __int64)&vars0);
return 3221225858i64;
}
BestConfiguration = PnpFindBestConfiguration((INT64)Request, 1ui64, &ArbiterList);
PnpFreeResourceRequirementsForAssignTable((unsigned __int64)Request, (unsigned __int64)&vars0);
if( BestConfiguration >= 0 )
BestConfiguration = IopCommitConfiguration(&ArbiterList);
if( *(_QWORD *)&Request[10] )
ExFreePoolWithTag(*(PVOID *)&Request[10], 0);
if( *(_QWORD *)&Request[12] )
ExFreePoolWithTag(*(PVOID *)&Request[12], 0);
v7 = DeviceNode->ResourceList;
v8 = PnpDetermineResourceListSize(v7);
IopWriteAllocatedResourcesToRegistry(DeviceNode, v7, v8);
}
else
{
ExFreePoolWithTag(*(PVOID *)&Request[6], 0);
}
return(unsigned int)BestConfiguration;
}Referenced by:
PnpReallocateResources