PnpSetPlugPlayEvent
VOID __stdcall PnpSetPlugPlayEvent(GUID *EventGuid, DEVICE_OBJECT *DeviceObject){
DEVICE_OBJECT *v2;
__int64 v4;
int v5;
_DWORD *DeviceEventEntry;
__int64 v7;
GUID v8;
UINT8 *v9;
__int64 v10;
__int64 v11;
__int64 v12;
v2 = DeviceObject;
if( !PnpShutdownEvent.Header.SignalState )
{
v4 = *(_QWORD *)(*((_QWORD *)DeviceObject + 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 = *EventGuid;
DeviceEventEntry[37] = v5;
v9 = (UINT8 *)(DeviceEventEntry + 40);
*((GUID *)DeviceEventEntry + 7) = v8;
v10 = *(_QWORD *)&EventGuid->Data1 - *(_QWORD *)&GUID_DEVICE_ENUMERATED.Data1;
if( *(_QWORD *)&EventGuid->Data1 == *(_QWORD *)&GUID_DEVICE_ENUMERATED.Data1 )
v10 = *(_QWORD *)EventGuid->Data4 - *(_QWORD *)GUID_DEVICE_ENUMERATED.Data4;
if( v10 )
*(_DWORD *)(v7 + 128) = 1;
else
*(_DWORD *)(v7 + 128) = 4;
memmove(v9, *(UINT8 **)(v4 + 48), *(unsigned __int16 *)(v4 + 40));
*(_WORD *)(v7 + 2 * ((unsigned __int64)*(unsigned __int16 *)(v4 + 40) >> 1) + 160) = 0;
v11 = *(_QWORD *)&EventGuid->Data1 - *(_QWORD *)&GUID_DEVICE_ENUMERATED.Data1;
if( *(_QWORD *)&EventGuid->Data1 == *(_QWORD *)&GUID_DEVICE_ENUMERATED.Data1 )
v11 = *(_QWORD *)EventGuid->Data4 - *(_QWORD *)GUID_DEVICE_ENUMERATED.Data4;
if( !v11 )
goto LABEL_11;
v12 = *(_QWORD *)&EventGuid->Data1 - *(_QWORD *)&GUID_DEVICE_ARRIVAL.Data1;
if( *(_QWORD *)&EventGuid->Data1 == *(_QWORD *)&GUID_DEVICE_ARRIVAL.Data1 )
v12 = *(_QWORD *)EventGuid->Data4 - *(_QWORD *)GUID_DEVICE_ARRIVAL.Data4;
if( v12 )
ObfReferenceObjectWithTag(v2, 0x56706E50u);
else
LABEL_11:
v2 = 0i64;
*(_QWORD *)(v7 + 152) = v2;
PnpInsertEventInQueue(v7);
}
}
}
}Referenced by:
PiInitializeDevice
PiProcessNewDeviceNode
PipProcessStartPhase3