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