PiPnpRtlGatherDeviceDeleteInfo
INT64 __fastcall PiPnpRtlGatherDeviceDeleteInfo(WCHAR *SourceString, INT64 a2){
VOID *PoolWithTag;
WCHAR v5;
_DWORD *v6;
int v7;
int DeviceRegProp;
_DWORD *v9;
struct _UNICODE_STRING DestinationString;
struct _UNICODE_STRING Buffer;
__int64 v13;
__int64 v14;
__int64 v15;
int v16;
unsigned int v17;
v16 = 0;
DestinationString = 0i64;
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x54ui64, 0x47706E50ui64);
*(_QWORD *)a2 = PoolWithTag;
if( !PoolWithTag )
{
DeviceRegProp = -1073741670;
LABEL_19:
*(_QWORD *)a2 = 0i64;
return(unsigned int)DeviceRegProp;
}
memset((INT64)PoolWithTag, 0i64);
RtlInitUnicodeString(&DestinationString, SourceString, v5);
v6 = *(_DWORD **)a2;
if( *(_QWORD *)a2 )
{
v15 = 0i64;
v13 = 0i64;
v14 = 0i64;
Buffer = DestinationString;
ZwPlugPlayControl();
if( v7 >= 0 )
*v6 = v14;
v6 = *(_DWORD **)a2;
}
else
{
v7 = -1073741811;
}
if( v7 < 0 )
{
v6 = *(_DWORD **)a2;
**(_DWORD **)a2 = 45;
}
v17 = 78;
DeviceRegProp = CmGetDeviceRegProp(
PiPnpRtlCtx,
SourceString,
0i64,
9,
(__int64)&v16,
(__int64)(v6 + 1),
(__int64)&v17,
0);
if( DeviceRegProp >= 0 && v16 == 1 && v17 > 2 )
{
v9 = *(_DWORD **)a2;
*(_WORD *)(*(_QWORD *)a2 + 80i64) = 0;
}
else
{
v9 = *(_DWORD **)a2;
DeviceRegProp = 0;
*(_WORD *)(*(_QWORD *)a2 + 4i64) = 0;
}
if( DeviceRegProp < 0 )
{
if( v9 )
ExFreePoolWithTag(v9, 0x47706E50u);
goto LABEL_19;
}
return(unsigned int)DeviceRegProp;
}Referenced by:
PiPnpRtlCmActionCallback