IopSaveRestoreConfiguration
VOID __stdcall IopSaveRestoreConfiguration(
_PNP_RESOURCE_REQUEST *RequestTable,
UINT64 RequestTableCount,
_LIST_ENTRY *ArbiterList,
UINT8 Save){
void **p_ReqList;
__int64 v7;
_QWORD *v8;
__int64 *v9;
__int64 v10;
unsigned __int64 v11;
__int64 v12;
unsigned __int64 v13;
__int64 v14;
int v15;
__int128 v16;
__int128 v17;
__int128 v18;
__int128 v19;
__int128 v20;
__int128 v21;
int v22;
__int128 v23;
__int128 v24;
__int128 v25;
__int128 v26;
__int128 v27;
__int128 v28;
_LIST_ENTRY *i;
_LIST_ENTRY v30;
_LIST_ENTRY v31;
if( (_DWORD)RequestTableCount )
{
p_ReqList = &RequestTable->ReqList;
v7 = (unsigned int)RequestTableCount;
do
{
v8 = *p_ReqList;
if( Save )
{
v9 = (__int64 *)v8[2];
v8[3] = v9;
}
else
{
v9 = (__int64 *)v8[3];
v8[2] = v9;
}
v10 = *v9;
v11 = 0i64;
v12 = v10 + 24;
v13 = (8 * ((unsigned __int64)*(unsigned int *)(v10 + 20) + 3) - 24 + 7) >> 3;
if( v10 + 24 > v10 + 8 * ((unsigned __int64)*(unsigned int *)(v10 + 20) + 3) )
v13 = 0i64;
if( v13 )
{
do
{
if( *(_BYTE *)(*(_QWORD *)v12 + 8i64) )
{
v14 = *(_QWORD *)(*(_QWORD *)v12 + 32i64);
if( Save )
{
v15 = *(_DWORD *)(v14 + 152);
v16 = *(_OWORD *)(v14 + 56);
*(_OWORD *)(v14 + 160) = *(_OWORD *)(v14 + 40);
v17 = *(_OWORD *)(v14 + 72);
*(_OWORD *)(v14 + 176) = v16;
v18 = *(_OWORD *)(v14 + 88);
*(_OWORD *)(v14 + 192) = v17;
v19 = *(_OWORD *)(v14 + 104);
*(_OWORD *)(v14 + 208) = v18;
v20 = *(_OWORD *)(v14 + 120);
*(_OWORD *)(v14 + 224) = v19;
v21 = *(_OWORD *)(v14 + 136);
*(_OWORD *)(v14 + 240) = v20;
*(_OWORD *)(v14 + 256) = v21;
*(_DWORD *)(v14 + 272) = v15;
}
else
{
v22 = *(_DWORD *)(v14 + 272);
v23 = *(_OWORD *)(v14 + 176);
*(_OWORD *)(v14 + 40) = *(_OWORD *)(v14 + 160);
v24 = *(_OWORD *)(v14 + 192);
*(_OWORD *)(v14 + 56) = v23;
v25 = *(_OWORD *)(v14 + 208);
*(_OWORD *)(v14 + 72) = v24;
v26 = *(_OWORD *)(v14 + 224);
*(_OWORD *)(v14 + 88) = v25;
v27 = *(_OWORD *)(v14 + 240);
*(_OWORD *)(v14 + 104) = v26;
v28 = *(_OWORD *)(v14 + 256);
*(_OWORD *)(v14 + 120) = v27;
*(_OWORD *)(v14 + 136) = v28;
*(_DWORD *)(v14 + 152) = v22;
}
}
v12 += 8i64;
++v11;
}
while( v11 < v13 );
}
p_ReqList += 8;
--v7;
}
while( v7 );
}
for( i = ArbiterList->Flink; i != ArbiterList; i = i->Flink )
{
if( Save )
{
v30 = *i;
i[-2] = i[-3];
i[-1] = v30;
}
else
{
v31 = i[-1];
i[-3] = i[-2];
*i = v31;
}
}
}Referenced by:
PnpFindBestConfigurationWorker