PiUpdateDeviceResourceLists
NTSTATUS __fastcall PiUpdateDeviceResourceLists(_QWORD *a1){
_DEVICE_OBJECT *v2;
VOID **v3;
VOID **v4;
NTSTATUS result;
__int64 v6;
int v7;
void *v8;
void *v9;
VOID *v10;
__int128 P;
v10 = 0i64;
v2 = (_DEVICE_OBJECT *)a1[4];
v3 = 0i64;
P = 0ui64;
v4 = 0i64;
result = IopQueryBusResourceUpdateInterface(v2, &P);
if( result < 0 )
return result;
v6 = P;
v7 = (*(__int64(__fastcall **)(_QWORD, char *, VOID **))(P + 32))(*(_QWORD *)(P + 8), (char *)&P + 8, &v10);
if( v7 >= 0 )
{
if( !*((_QWORD *)&P + 1) || !v10 )
{
LABEL_13:
v7 = 0;
goto LABEL_14;
}
v3 = PnpCopyResourceList(*((VOID **)&P + 1));
if( v3 )
{
v4 = PnpCopyResourceList(v10);
if( v4 )
{
ExAcquireFastMutex((PFAST_MUTEX)((char *)&PnpReplaceEvent + 6336));
v8 = (void *)a1[52];
if( v8 )
ExFreePoolWithTag(v8, 0);
v9 = (void *)a1[53];
if( v9 )
ExFreePoolWithTag(v9, 0);
a1[52] = v3;
a1[53] = v4;
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&PnpReplaceEvent + 6336));
goto LABEL_13;
}
}
v7 = -1073741670;
}
LABEL_14:
(*(void(__fastcall **)(_QWORD))(v6 + 24))(*(_QWORD *)(v6 + 8));
ExFreePoolWithTag((PVOID)v6, 0);
if( v7 < 0 )
{
if( v3 )
ExFreePoolWithTag(v3, 0);
if( v4 )
ExFreePoolWithTag(v4, 0);
}
return v7;
}Referenced by:
PiProcessQueryDeviceState