PnpDeviceCompletionQueueDispatchedEntryCompleted
__int64 __fastcall PnpDeviceCompletionQueueDispatchedEntryCompleted(__int64 a1, _LIST_ENTRY *a2){
unsigned __int8 v3;
VOID *v4;
_LIST_ENTRY *Flink;
unsigned __int64 v6;
_LIST_ENTRY *Blink;
_LIST_ENTRY *v8;
__int64 result;
UINT64 v10;
v3 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&PnpReplaceEvent + 749);
Flink = a2->Flink;
v6 = v3;
Blink = a2->Blink;
if( a2->Flink->Blink != a2
|| Blink->Flink != a2
|| (Blink->Flink = Flink,
Flink->Blink = Blink,
v8 = (_LIST_ENTRY *)*(&PnpReplaceEvent + 744),
--*(&PnpReplaceEvent + 1484),
(_UNKNOWN *)**(&PnpReplaceEvent + 744) != (_UNKNOWN *)((char *)&PnpReplaceEvent + 5944)) )
{
__fastfail(3u);
}
LODWORD(v10) = 0;
a2->Flink = (_LIST_ENTRY *)((char *)&PnpReplaceEvent + 5944);
a2->Blink = v8;
v8->Flink = a2;
*(&PnpReplaceEvent + 744) = a2;
KeReleaseSemaphoreEx((_KSEMAPHORE *)((char *)&PnpReplaceEvent + 5960), 0i64, 1i64, v4, v10);
KxReleaseSpinLock((UINT64 *)&PnpReplaceEvent + 749);
result = (unsigned int)KiIrqlFlags;
__writecr8(v6);
return result;
}Referenced by:
PipEnumerateDevice
PnpDeviceCompletionRoutine