PiPnpRtlGatherInterfaceDeleteInfo
INT64 __fastcall PiPnpRtlGatherInterfaceDeleteInfo(WCHAR *a1, INT64 **a2){
void *v2;
INT64 *PoolWithTag;
int Object;
int ObjectProperty;
int v8;
int v9;
int v10;
int v11;
INT64 v13;
UINT64 v14;
INT64 v15;
__int128 v16;
__int16 v17[40];
v2 = 0i64;
v14 = 0i64;
v15 = 0i64;
v16 = 0i64;
PoolWithTag = (INT64 *)ExAllocatePoolWithTag(PagedPool, 0x20ui64, 0x47706E50ui64);
*a2 = PoolWithTag;
if( PoolWithTag )
{
*(_OWORD *)PoolWithTag = 0i64;
*((_OWORD *)PoolWithTag + 1) = 0i64;
Object = PiDmGetObject(3i64, a1, *a2);
if( (int)(Object + 0x80000000) < 0 || Object == -1073741772 )
{
ObjectProperty = PnpGetObjectProperty(
PiPnpRtlCtx,
(__int64)a1,
3i64,
0i64,
0i64,
(__int64)&DEVPKEY_DeviceInterface_ClassGuid,
(int *)&v14 + 1,
(unsigned __int64)&v16,
16,
(ULONG *)&v14,
0);
Object = ObjectProperty;
if( ObjectProperty == -1073741772
|| ObjectProperty == -1073741275
|| ObjectProperty >= 0
&& ((PnpStringFromGuid((int *)&v16, (wchar_t *)v17), v8 < 0)
|| (Object = PiDmGetObject(4i64, (WCHAR *)v17, *a2 + 1), (int)(Object + 0x80000000) < 0)
|| Object == -1073741772) )
{
LODWORD(v13) = 0;
v9 = PnpGetObjectProperty(
1198550608i64,
200i64,
(INT64)a1,
3i64,
0i64,
0i64,
(INT64 *)&DEVPKEY_Device_InstanceId,
(UINT64)&v14 + 4,
(INT64)&v15,
(ULONG *)&v14,
v13);
v2 = (void *)v15;
Object = v9;
if( v9 == -1073741772
|| v9 == -1073741275
|| v9 >= 0
&& ((Object = PiDmGetObject(1i64, (WCHAR *)v15, *a2 + 2), (int)(Object + 0x80000000) < 0)
|| Object == -1073741772) )
{
v10 = PnpGetObjectProperty(
PiPnpRtlCtx,
(__int64)a1,
3i64,
0i64,
0i64,
(__int64)&DEVPKEY_Device_ContainerId,
(int *)&v14 + 1,
(unsigned __int64)&v16,
16,
(ULONG *)&v14,
0);
Object = v10;
if( v10 == -1073741772 || v10 == -1073741275 )
{
Object = 0;
goto LABEL_21;
}
if( v10 >= 0 )
{
PnpStringFromGuid((int *)&v16, (wchar_t *)v17);
Object = v11;
if( v11 >= 0 )
{
Object = PiDmGetObject(5i64, (WCHAR *)v17, *a2 + 3);
if( Object == -1073741772 )
{
Object = 0;
goto LABEL_18;
}
LABEL_21:
if( Object >= 0 )
goto LABEL_18;
}
}
}
}
}
}
else
{
Object = -1073741670;
}
PiPnpRtlFreeInterfaceDeleteInfo(*a2);
*a2 = 0i64;
LABEL_18:
if( v2 )
ExFreePoolWithTag(v2, 0x47706E50u);
return(unsigned int)Object;
}Referenced by:
PiPnpRtlCmActionCallback