PnpProcessTargetDeviceEvent
__int64 __fastcall PnpProcessTargetDeviceEvent(const void **a1){
unsigned int v1;
_QWORD *v2;
__int64 v4;
__int64 v5;
INT64 v6;
_QWORD *v7;
__int64 v8;
__int64 v9;
__int64 v10;
INT64 v12;
INT64 v13;
PVOID P;
P = 0i64;
v1 = 0;
v2 = *a1;
v4 = *((_QWORD *)*a1 + 19);
if( v4 )
v5 = *(_QWORD *)(*(_QWORD *)(v4 + 312) + 40i64);
else
v5 = 0i64;
PiPnpRtlBeginOperation((__int64 **)&P);
v7 = v2 + 14;
v8 = v2[14] - *(_QWORD *)&GUID_DEVICE_QUERY_AND_REMOVE.Data1;
if( !v8 )
v8 = v2[15] - *(_QWORD *)GUID_DEVICE_QUERY_AND_REMOVE.Data4;
if( !v8 )
goto LABEL_17;
v9 = *v7 - *(_QWORD *)&GUID_DEVICE_EJECT.Data1;
if( *v7 == *(_QWORD *)&GUID_DEVICE_EJECT.Data1 )
v9 = v2[15] - *(_QWORD *)GUID_DEVICE_EJECT.Data4;
if( v9 )
{
v10 = *v7 - *(_QWORD *)&GUID_DEVICE_ARRIVAL.Data1;
if( *v7 == *(_QWORD *)&GUID_DEVICE_ARRIVAL.Data1 )
v10 = v2[15] - *(_QWORD *)GUID_DEVICE_ARRIVAL.Data4;
if( v10 )
{
memcmp(v7, &GUID_DEVICE_NOOP, 0x10ui64);
v1 = 0;
}
else
{
PiUEventNotifyUserMode((__int64)v2);
}
}
else
{
LABEL_17:
if( (byte_140C130BB & 8) != 0 )
McTemplateK0z_EtwWriteTransfer((INT64)v7, &KMPnPEvt_DeviceRemoval_Start, v6, *(const WCHAR **)(v5 + 48));
v1 = PnpProcessQueryRemoveAndEject(a1);
if( (byte_140C130BB & 8) != 0 )
McTemplateK0z_EtwWriteTransfer(v12, &KMPnPEvt_DeviceRemoval_Stop, v13, *(const WCHAR **)(v5 + 48));
}
if( P )
PiPnpRtlEndOperation(P);
return v1;
}Referenced by:
PnpDeviceEventWorker