PiUEventProcessBroadcastNotifications
__int64 __fastcall PiUEventProcessBroadcastNotifications(__int64 a1){
NTSTATUS ObjectProperty;
int v3;
int v4;
int v5;
int v6;
INT64 v7;
__int64 v8;
__int64 v9;
bool v11;
__int64 v12;
VOID **v13;
VOID **v14;
__int64 v15;
__int64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
__int64 v22;
VOID **v23;
VOID **v24;
VOID **v25;
VOID **v26;
VOID **PoolWithTag;
size_t pcchLength[2];
_UNICODE_STRING DestinationString;
INT64 v30;
int v31;
int v32;
ObjectProperty = 0;
*(_QWORD *)pcchLength = 0i64;
v31 = 0;
DestinationString = 0i64;
LODWORD(v30) = 0;
if( !PiUEventBroadcastSubscriberPresent )
return(unsigned int)ObjectProperty;
v3 = *(_DWORD *)(a1 + 88);
if( !v3 )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x1C0ui64, 1500540496i64);
v14 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741670;
memset(PoolWithTag, 0i64, 0x1C0u);
*((_DWORD *)v14 + 6) = -1;
*((_DWORD *)v14 + 5) = 2;
*(_OWORD *)((char *)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 = ExAllocatePoolWithTag(1ui64, 0x1C0ui64, 1500540496i64);
v14 = v13;
if( !v13 )
return(unsigned int)-1073741670;
memset(v13, 0i64, 0x1C0u);
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
a1 + 120,
1i64,
0i64,
0i64,
(INT64)&DEVPKEY_Device_SessionId,
(INT64)&v30,
(INT64)(v14 + 3));
if( ObjectProperty < 0 || v31 != 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;
}
v26 = ExAllocatePoolWithTag(1ui64, 0x1C0ui64, 1500540496i64);
v14 = v26;
if( !v26 )
return(unsigned int)-1073741670;
memset(v26, 0i64, 0x1C0u);
RtlInitUnicodeString(&DestinationString, (PCWSTR)(a1 + 136));
*((_DWORD *)v14 + 5) = 3;
*(_OWORD *)((char *)v14 + 28) = *(_OWORD *)(a1 + 72);
v32 = 400;
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
a1 + 136,
3i64,
0i64,
0i64,
(INT64)&DEVPKEY_Device_InstanceId,
(INT64)&v30,
(INT64)v14 + 44);
if( ObjectProperty < 0 || (_DWORD)v30 != 18 )
{
ExFreePoolWithTag(v14, 0x59706E50u);
return(unsigned int)ObjectProperty;
}
v32 = 4;
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
(INT64)v14 + 44,
1i64,
0i64,
0i64,
(INT64)&DEVPKEY_Device_SessionId,
(INT64)&v30,
(INT64)(v14 + 3));
if( ObjectProperty < 0 || (_DWORD)v30 != 7 )
{
*((_DWORD *)v14 + 6) = -1;
ObjectProperty = 0;
}
}
else
{
v23 = ExAllocatePoolWithTag(1ui64, 0x1C0ui64, 1500540496i64);
v14 = v23;
if( !v23 )
return(unsigned int)-1073741670;
memset(v23, 0i64, 0x1C0u);
RtlInitUnicodeString(&DestinationString, (PCWSTR)(a1 + 136));
*((_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((WCHAR *)(a1 + 128), 0xC8ui64, (UINT64 *)pcchLength);
if( ObjectProperty >= 0 && *(_QWORD *)pcchLength )
{
if( 2 * pcchLength[0] + 82 < 0x50 || 2 * pcchLength[0] + 89 < 2 * pcchLength[0] + 82 )
return(unsigned int)-1073741675;
ObjectProperty = 0;
v8 = (2 * pcchLength[0] + 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 )
{
v24 = ExAllocatePoolWithTag(1ui64, 0x1C0ui64, 1500540496i64);
v25 = v24;
if( v24 )
{
memset(v24, 0i64, 0x1C0u);
*((_DWORD *)v25 + 5) = 1;
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
v7,
1i64,
0i64,
0i64,
(INT64)&DEVPKEY_Device_SessionId,
(INT64)&v30,
(INT64)(v25 + 3));
if( ObjectProperty < 0 || v31 != 4 )
{
*((_DWORD *)v25 + 6) = -1;
ObjectProperty = 0;
}
v15 = (__int64)v25;
goto LABEL_24;
}
return(unsigned int)-1073741670;
}
}
return(unsigned int)ObjectProperty;
}Referenced by:
No references.