PiUEventNotifyClient
INT64 __fastcall PiUEventNotifyClient(INT64 a1, INT64 a2){
int v4;
char v5;
_QWORD *PoolWithTag;
v4 = 0;
v5 = 0;
ExAcquireFastMutex(*(FAST_MUTEX **)(a2 + 16));
if( *(_BYTE *)(a2 + 140) )
{
if( !PiUEventIsClientStuck(a2) )
goto LABEL_3;
++*(_DWORD *)(a2 + 136);
}
v5 = 1;
LABEL_3:
KeReleaseGuardedMutex(*(_FAST_MUTEX **)(a2 + 16));
if( !v5 )
{
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x20ui64, 0x59706E50ui64);
if( PoolWithTag )
{
PiUEventReferenceEventEntry(a1);
PoolWithTag[3] = a1;
ExAcquireFastMutex(*(FAST_MUTEX **)(a2 + 16));
v4 = PiUEventQueuePendingEvent(a2, PoolWithTag);
if( v4 < 0 )
{
PiUEventDequeuePendingEventWorker(a2, *(INT64 **)(a2 + 112), 0);
++*(_DWORD *)(a2 + 136);
v4 = PiUEventQueuePendingEvent(a2, PoolWithTag);
}
if( v4 < 0 )
{
++*(_DWORD *)(a2 + 136);
KeReleaseGuardedMutex(*(_FAST_MUTEX **)(a2 + 16));
}
else
{
PoolWithTag[2] = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
KeReleaseGuardedMutex(*(_FAST_MUTEX **)(a2 + 16));
PiUEventNotifyClientPendingEvent(a2);
}
}
else
{
return(unsigned int)-1073741670;
}
}
return(unsigned int)v4;
}Referenced by:
PiUEventNotifyDeviceInstanceChange
PiUEventNotifyDeviceInstancePropertyChange
PiUEventNotifyDeviceInterfaceChange
PiUEventNotifyTargetDeviceChange