PnpSetPlugPlayEvent
void __fastcall PnpSetPlugPlayEvent(__int128 *a1, _QWORD *a2){
_QWORD *v2;
__int64 v4;
int v5;
VOID **DeviceEventEntry;
__int64 v7;
__int128 v8;
VOID *v9;
__int64 v10;
__int64 v11;
__int64 v12;
v2 = a2;
if( !*(&PnpReplaceEvent + 1665) )
{
v4 = *(_QWORD *)(a2[39] + 40i64);
if( v4 )
{
v5 = *(unsigned __int16 *)(v4 + 40) + 80;
DeviceEventEntry = PnpCreateDeviceEventEntry((unsigned int)*(unsigned __int16 *)(v4 + 40) + 192);
v7 = (__int64)DeviceEventEntry;
if( DeviceEventEntry )
{
v8 = *a1;
*((_DWORD *)DeviceEventEntry + 37) = v5;
v9 = DeviceEventEntry + 20;
*((_OWORD *)DeviceEventEntry + 7) = v8;
v10 = *(_QWORD *)a1 - *(_QWORD *)&GUID_DEVICE_ENUMERATED.Data1;
if( *(_QWORD *)a1 == *(_QWORD *)&GUID_DEVICE_ENUMERATED.Data1 )
v10 = *((_QWORD *)a1 + 1) - *(_QWORD *)GUID_DEVICE_ENUMERATED.Data4;
if( v10 )
*(_DWORD *)(v7 + 128) = 1;
else
*(_DWORD *)(v7 + 128) = 4;
memmove(v9, *(const VOID **)(v4 + 48), *(unsigned __int16 *)(v4 + 40));
*(_WORD *)(v7 + 2 * ((unsigned __int64)*(unsigned __int16 *)(v4 + 40) >> 1) + 160) = 0;
v11 = *(_QWORD *)a1 - *(_QWORD *)&GUID_DEVICE_ENUMERATED.Data1;
if( *(_QWORD *)a1 == *(_QWORD *)&GUID_DEVICE_ENUMERATED.Data1 )
v11 = *((_QWORD *)a1 + 1) - *(_QWORD *)GUID_DEVICE_ENUMERATED.Data4;
if( !v11 )
goto LABEL_11;
v12 = *(_QWORD *)a1 - *(_QWORD *)&GUID_DEVICE_ARRIVAL.Data1;
if( *(_QWORD *)a1 == *(_QWORD *)&GUID_DEVICE_ARRIVAL.Data1 )
v12 = *((_QWORD *)a1 + 1) - *(_QWORD *)GUID_DEVICE_ARRIVAL.Data4;
if( v12 )
ObfReferenceObjectWithTag(v2, 0x56706E50ui64);
else
LABEL_11:
v2 = 0i64;
*(_QWORD *)(v7 + 152) = v2;
PnpInsertEventInQueue(v7);
}
}
}
}Referenced by:
PiInitializeDevice
PiProcessNewDeviceNode
PipProcessStartPhase3