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