PnpLookupArbitersNewResources
__int64 __fastcall PnpLookupArbitersNewResources(
__int64 a1,
unsigned int a2,
__int64 a3,
char a4,
_QWORD *a5,
unsigned int *a6){
unsigned int v6;
unsigned int v8;
__int64 v9;
unsigned int v11;
__int64 *v12;
__int64 v13;
unsigned int v14;
__int64 v15;
__int64 v16;
char v17;
VOID **PoolWithTag;
__int64 v19;
char v20;
v6 = 0;
v8 = 0;
if( !a2 )
return 3221225473i64;
v9 = *(_QWORD *)(a3 + 32);
do
{
if( *(_QWORD *)(((unsigned __int64)v8 << 6) + a1) == v9 )
break;
++v8;
}
while( v8 < a2 );
if( v8 >= a2 )
return 3221225473i64;
_mm_lfence();
v11 = 0;
v12 = *(__int64 **)(*(_QWORD *)(((unsigned __int64)v8 << 6) + a1 + 32) + 16i64);
v13 = *v12;
v14 = *(_DWORD *)(*v12 + 20);
if( v14 )
{
v15 = v13 + 24;
v16 = v14;
do
{
v17 = *(_BYTE *)(*(_QWORD *)(*(_QWORD *)v15 + 32i64) + 136i64);
if( v17 == a4 || v17 == 7 && a4 == 3 )
++v11;
v15 += 8i64;
--v16;
}
while( v16 );
if( v11 )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, 20i64 * v11, 538996816i64);
if( !PoolWithTag )
return 3221225626i64;
*a6 = v11;
*a5 = PoolWithTag;
if( *(_DWORD *)(v13 + 20) )
{
do
{
v19 = *(_QWORD *)(*(_QWORD *)(v13 + 8i64 * v6 + 24) + 32i64);
v20 = *(_BYTE *)(v19 + 136);
if( v20 == a4 || v20 == 7 && a4 == 3 )
{
*(_OWORD *)PoolWithTag = *(_OWORD *)(v19 + 136);
*((_DWORD *)PoolWithTag + 4) = *(_DWORD *)(v19 + 152);
PoolWithTag = (VOID **)((char *)PoolWithTag + 20);
}
++v6;
}
while( v6 < *(_DWORD *)(v13 + 20) );
}
}
}
return 0i64;
}Referenced by:
IopRetestConfiguration
IopTestConfiguration