PiPnpRtlGatherInterfaceDeleteInfo
NTSTATUS __stdcall PiPnpRtlGatherInterfaceDeleteInfo(WCHAR *InterfaceId, PI_PNPRTL_INTERFACE_DELETE_INFO **Info){
WCHAR *v2;
VOID **PoolWithTag;
int Object;
NTSTATUS ObjectProperty;
UINT64 v8;
int v9;
NTSTATUS v10;
UINT64 v11;
INT64 v13;
WCHAR *ObjectName;
INT64 v15[2];
WCHAR GuidString[40];
v2 = 0i64;
v13 = 0i64;
ObjectName = 0i64;
*(_OWORD *)v15 = 0i64;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x20ui64, 1198550608i64);
*Info = (PI_PNPRTL_INTERFACE_DELETE_INFO *)PoolWithTag;
if( PoolWithTag )
{
*(_OWORD *)PoolWithTag = 0i64;
*((_OWORD *)PoolWithTag + 1) = 0i64;
Object = PiDmGetObject(3, InterfaceId, (PI_DM_OBJECT **)*Info);
if( (int)(Object + 0x80000000) < 0 || Object == -1073741772 )
{
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
(INT64)InterfaceId,
3i64,
0i64,
0i64,
(INT64)&DEVPKEY_DeviceInterface_ClassGuid,
(INT64)&v13 + 4,
(INT64)v15);
Object = ObjectProperty;
if( ObjectProperty == -1073741772
|| ObjectProperty == -1073741275
|| ObjectProperty >= 0
&& (PnpStringFromGuid((const _GUID *)v15, GuidString, v8) < 0
|| (Object = PiDmGetObject(4, GuidString, (PI_DM_OBJECT **)*Info + 1), (int)(Object + 0x80000000) < 0)
|| Object == -1073741772) )
{
v9 = PnpGetObjectProperty(
0x47706E50u,
0xC8ui64,
(INT64)InterfaceId,
3u,
0i64,
0i64,
(INT64)&DEVPKEY_Device_InstanceId,
(INT64)&v13 + 4,
(__int64)&ObjectName,
(__int64)&v13);
v2 = ObjectName;
Object = v9;
if( v9 == -1073741772
|| v9 == -1073741275
|| v9 >= 0
&& ((Object = PiDmGetObject(1, ObjectName, (PI_DM_OBJECT **)*Info + 2), (int)(Object + 0x80000000) < 0)
|| Object == -1073741772) )
{
v10 = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
(INT64)InterfaceId,
3i64,
0i64,
0i64,
(INT64)&DEVPKEY_Device_ContainerId,
(INT64)&v13 + 4,
(INT64)v15);
Object = v10;
if( v10 == -1073741772 || v10 == -1073741275 )
{
Object = 0;
goto LABEL_21;
}
if( v10 >= 0 )
{
Object = PnpStringFromGuid((const _GUID *)v15, GuidString, v11);
if( Object >= 0 )
{
Object = PiDmGetObject(5, GuidString, (PI_DM_OBJECT **)*Info + 3);
if( Object == -1073741772 )
{
Object = 0;
goto LABEL_18;
}
LABEL_21:
if( Object >= 0 )
goto LABEL_18;
}
}
}
}
}
}
else
{
Object = -1073741670;
}
PiPnpRtlFreeInterfaceDeleteInfo(*Info);
*Info = 0i64;
LABEL_18:
if( v2 )
ExFreePoolWithTag(v2, 0x47706E50u);
return Object;
}Referenced by:
PiPnpRtlCmActionCallback