PiUEventProcessBroadcastNotifications
__int64 __fastcall PiUEventProcessBroadcastNotifications(__int64 a1){
int ObjectProperty;
int v3;
int v4;
int v5;
int v6;
__int64 v7;
__int64 v8;
__int64 v9;
bool v11;
__int64 v12;
char *v13;
char *v14;
__int64 v15;
__int64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
__int64 v22;
char *v23;
WCHAR v24;
_DWORD *v25;
_DWORD *v26;
char *v27;
WCHAR v28;
char *PoolWithTag;
size_t pcchLength;
struct _UNICODE_STRING DestinationString;
int v32;
ULONG v33;
ULONG v34;
ObjectProperty = 0;
pcchLength = 0i64;
v33 = 0;
DestinationString = 0i64;
v32 = 0;
if( !PiUEventBroadcastSubscriberPresent )
return(unsigned int)ObjectProperty;
v3 = *(_DWORD *)(a1 + 88);
if( !v3 )
{
PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, 0x1C0ui64, 0x59706E50ui64);
v14 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741670;
memset((INT64)PoolWithTag, 0i64);
*((_DWORD *)v14 + 6) = -1;
*((_DWORD *)v14 + 5) = 2;
*(_OWORD *)(v14 + 28) = *(_OWORD *)(a1 + 72);
goto LABEL_23;
}
v4 = v3 - 1;
if( !v4 )
{
v12 = *(_QWORD *)(a1 + 72) - *(_QWORD *)&GUID_DEVICE_ARRIVAL.Data1;
if( !v12 )
v12 = *(_QWORD *)(a1 + 80) - *(_QWORD *)GUID_DEVICE_ARRIVAL.Data4;
if( !v12 )
goto LABEL_20;
v21 = *(_QWORD *)(a1 + 72) - *(_QWORD *)&GUID_DEVICE_REMOVE_PENDING.Data1;
if( !v21 )
v21 = *(_QWORD *)(a1 + 80) - *(_QWORD *)GUID_DEVICE_REMOVE_PENDING.Data4;
if( !v21 )
{
LABEL_20:
v13 = (char *)ExAllocatePoolWithTag(PagedPool, 0x1C0ui64, 0x59706E50ui64);
v14 = v13;
if( !v13 )
return(unsigned int)-1073741670;
memset((INT64)v13, 0i64);
ObjectProperty = PnpGetObjectProperty(
PiPnpRtlCtx,
a1 + 120,
1i64,
0i64,
0i64,
(__int64)&DEVPKEY_Device_SessionId,
&v32,
(unsigned __int64)(v14 + 24),
4,
&v33,
0);
if( ObjectProperty < 0 || v33 != 4 )
{
*((_DWORD *)v14 + 6) = -1;
ObjectProperty = 0;
}
goto LABEL_23;
}
v22 = *(_QWORD *)(a1 + 72) - *(_QWORD *)&GUID_TARGET_DEVICE_REMOVE_COMPLETE.Data1;
if( !v22 )
v22 = *(_QWORD *)(a1 + 80) - *(_QWORD *)GUID_TARGET_DEVICE_REMOVE_COMPLETE.Data4;
v11 = v22 == 0;
LABEL_15:
if( !v11 )
return(unsigned int)ObjectProperty;
goto LABEL_20;
}
v5 = v4 - 1;
if( !v5 )
{
v16 = *(_QWORD *)(a1 + 72) - *(_QWORD *)&GUID_DEVICE_INTERFACE_ARRIVAL.Data1;
if( !v16 )
v16 = *(_QWORD *)(a1 + 80) - *(_QWORD *)GUID_DEVICE_INTERFACE_ARRIVAL.Data4;
if( v16 )
{
v20 = *(_QWORD *)(a1 + 72) - *(_QWORD *)&GUID_DEVICE_INTERFACE_REMOVAL.Data1;
if( !v20 )
v20 = *(_QWORD *)(a1 + 80) - *(_QWORD *)GUID_DEVICE_INTERFACE_REMOVAL.Data4;
if( v20 )
return(unsigned int)ObjectProperty;
}
v17 = *(_QWORD *)(a1 + 120) - *(_QWORD *)&GUID_DEVINTERFACE_VOLUME.Data1;
if( !v17 )
v17 = *(_QWORD *)(a1 + 128) - *(_QWORD *)GUID_DEVINTERFACE_VOLUME.Data4;
if( v17 )
{
v18 = *(_QWORD *)(a1 + 120) - *(_QWORD *)&GUID_DEVINTERFACE_PARALLEL.Data1;
if( !v18 )
v18 = *(_QWORD *)(a1 + 128) - *(_QWORD *)GUID_DEVINTERFACE_PARALLEL.Data4;
if( v18 )
{
v19 = *(_QWORD *)(a1 + 120) - *(_QWORD *)&GUID_DEVINTERFACE_COMPORT.Data1;
if( !v19 )
v19 = *(_QWORD *)(a1 + 128) - *(_QWORD *)GUID_DEVINTERFACE_COMPORT.Data4;
if( v19 )
return(unsigned int)ObjectProperty;
}
v27 = (char *)ExAllocatePoolWithTag(PagedPool, 0x1C0ui64, 0x59706E50ui64);
v14 = v27;
if( !v27 )
return(unsigned int)-1073741670;
memset((INT64)v27, 0i64);
RtlInitUnicodeString(&DestinationString, (PCWSTR)(a1 + 136), v28);
*((_DWORD *)v14 + 5) = 3;
*(_OWORD *)(v14 + 28) = *(_OWORD *)(a1 + 72);
v34 = 400;
ObjectProperty = PnpGetObjectProperty(
PiPnpRtlCtx,
a1 + 136,
3i64,
0i64,
0i64,
(__int64)&DEVPKEY_Device_InstanceId,
&v32,
(unsigned __int64)(v14 + 44),
400,
&v34,
0);
if( ObjectProperty < 0 || v32 != 18 )
{
ExFreePoolWithTag(v14, 0x59706E50u);
return(unsigned int)ObjectProperty;
}
v34 = 4;
ObjectProperty = PnpGetObjectProperty(
PiPnpRtlCtx,
(__int64)(v14 + 44),
1i64,
0i64,
0i64,
(__int64)&DEVPKEY_Device_SessionId,
&v32,
(unsigned __int64)(v14 + 24),
4,
&v34,
0);
if( ObjectProperty < 0 || v32 != 7 )
{
*((_DWORD *)v14 + 6) = -1;
ObjectProperty = 0;
}
}
else
{
v23 = (char *)ExAllocatePoolWithTag(PagedPool, 0x1C0ui64, 0x59706E50ui64);
v14 = v23;
if( !v23 )
return(unsigned int)-1073741670;
memset((INT64)v23, 0i64);
RtlInitUnicodeString(&DestinationString, (PCWSTR)(a1 + 136), v24);
*((_DWORD *)v14 + 5) = 1;
*((_DWORD *)v14 + 6) = IopGetSessionIdFromSymbolicName(&DestinationString);
}
LABEL_23:
v15 = (__int64)v14;
LABEL_24:
PiUEventQueueBroadcastEventEntry(v15);
return(unsigned int)ObjectProperty;
}
v6 = v5 - 1;
if( v6 )
{
v11 = v6 == 1;
goto LABEL_15;
}
v7 = a1 + 128;
ObjectProperty = RtlStringCchLengthW((STRSAFE_PCNZWCH)(a1 + 128), 0xC8ui64, &pcchLength);
if( ObjectProperty >= 0 && pcchLength )
{
if( (unsigned int)(2 * pcchLength + 82) < 0x50 || 2 * (int)pcchLength + 89 < (unsigned int)(2 * pcchLength + 82) )
return(unsigned int)-1073741675;
ObjectProperty = 0;
v8 = (2 * (_DWORD)pcchLength + 89) & 0xFFFFFFF8;
v9 = *(_QWORD *)(v8 + a1 + 76) - *(_QWORD *)&GUID_IO_VOLUME_NAME_CHANGE.Data1;
if( !v9 )
v9 = *(_QWORD *)(v8 + a1 + 84) - *(_QWORD *)GUID_IO_VOLUME_NAME_CHANGE.Data4;
if( !v9 )
{
v25 = ExAllocatePoolWithTag(PagedPool, 0x1C0ui64, 0x59706E50ui64);
v26 = v25;
if( v25 )
{
memset((INT64)v25, 0i64);
v26[5] = 1;
ObjectProperty = PnpGetObjectProperty(
PiPnpRtlCtx,
v7,
1i64,
0i64,
0i64,
(__int64)&DEVPKEY_Device_SessionId,
&v32,
(unsigned __int64)(v26 + 6),
4,
&v33,
0);
if( ObjectProperty < 0 || v33 != 4 )
{
v26[6] = -1;
ObjectProperty = 0;
}
v15 = (__int64)v26;
goto LABEL_24;
}
return(unsigned int)-1073741670;
}
}
return(unsigned int)ObjectProperty;
}Referenced by:
No references.