PnpRemoveDeviceActionRequests
__int64 __fastcall PnpRemoveDeviceActionRequests(_LIST_ENTRY *a1){
unsigned __int8 v2;
__int64 *v3;
unsigned __int64 v4;
__int64 *v5;
__int64 result;
__int64 **v7;
_DWORD *v8;
_KEVENT *v9;
__int64 v10;
unsigned __int8 v11;
bool v12;
unsigned __int64 v13;
unsigned __int64 v14;
v2 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&PnpReplaceEvent + 50);
v3 = (__int64 *)*(&PnpReplaceEvent + 48);
v4 = v2;
if( (_UNKNOWN *)*(&PnpReplaceEvent + 48) != (_UNKNOWN *)((char *)&PnpReplaceEvent + 384) )
{
do
{
v5 = (__int64 *)*v3;
if( (_LIST_ENTRY *)v3[2] == a1 )
{
v7 = (__int64 **)v3[1];
if( (__int64 *)v5[1] != v3 || *v7 != v3 )
__fastfail(3u);
*v7 = v5;
v5[1] = (__int64)v7;
v8 = (_DWORD *)v3[6];
if( v8 )
*v8 = -1073741810;
v9 = (_KEVENT *)v3[5];
if( v9 )
KeSetEvent(v9, 0, 0);
v10 = *((unsigned int *)v3 + 6);
v11 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&stru_140C23628 + 700);
v12 = (*(&stru_140C23628 + 1402))-- == 1;
v13 = v11;
if( v12 )
PopDirectedDripsClearDisengageReason(4);
KxReleaseSpinLock((UINT64 *)&stru_140C23628 + 700);
__writecr8(v13);
v14 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(&qword_140C1E9B0);
if( !--dword_140C1E9B8 && byte_140C1EA28 )
{
qword_140C1EA30 += *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - qword_140C1EA38;
qword_140C1EA38 = 0i64;
}
--dword_140C1E9C0[v10];
KxReleaseSpinLock(&qword_140C1E9B0);
__writecr8(v14);
ObfDereferenceObjectWithTag((VOID *)v3[2], 0x746C6644ui64);
PnpDeleteDeviceActionRequest((volatile signed __int32 *)v3);
}
v3 = v5;
}
while( v5 != (__int64 *)((char *)&PnpReplaceEvent + 384) );
}
KxReleaseSpinLock((UINT64 *)&PnpReplaceEvent + 50);
result = (unsigned int)KiIrqlFlags;
__writecr8(v4);
return result;
}Referenced by:
PipSetDevNodeState