KeInsertByKeyDeviceQueue
INT8 __fastcall KeInsertByKeyDeviceQueue(INT64 a1, INT64 a2, UINT64 a3){
unsigned int v5;
INT8 v6;
char v7;
INT64 v8;
INT64 *v9;
_KLOCK_QUEUE_HANDLE LockHandle;
*(_DWORD *)(a2 + 16) = a3;
memset(&LockHandle, 0, sizeof(LockHandle));
v5 = a3;
v6 = 0;
KeAcquireInStackQueuedSpinLockForDpc((UINT64 *)(a1 + 24), &LockHandle, a3);
v7 = *(_BYTE *)(a1 + 32);
*(_BYTE *)(a1 + 32) = 1;
if( v7 == 1 )
{
v8 = a1 + 8;
if( *(_QWORD *)v8 != v8 && v5 < *(_DWORD *)(*(_QWORD *)(a1 + 16) + 16i64) )
{
do
v8 = *(_QWORD *)v8;
while( v5 >= *(_DWORD *)(v8 + 16) );
}
v9 = *(INT64 **)(v8 + 8);
if( *v9 != v8 )
__fastfail(3u);
*(_QWORD *)a2 = v8;
v6 = 1;
*(_QWORD *)(a2 + 8) = v9;
*v9 = a2;
*(_QWORD *)(v8 + 8) = a2;
}
*(_BYTE *)(a2 + 20) = v6;
KeReleaseInStackQueuedSpinLockForDpc(&LockHandle);
return v6;
}Referenced by:
IoStartPacket