IoGetAttachedDeviceReference

NTSTATUS __fastcall IoGetAttachedDeviceReference(INT64 a1, INT64 a2, INT64 a3){
  unsigned __int8 CurrentIrql; 
  _KSPIN_LOCK_QUEUE *v5; 
  INT64 i; 

  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  v5 = (_KSPIN_LOCK_QUEUE *)((char *)KeGetPcr()->NtTib.ArbitraryUserPointer + 160);
  KxAcquireQueuedSpinLock(v5, v5->Lock);
  for( i = *(_QWORD *)(a1 + 24); i; i = *(_QWORD *)(i + 24) )
    a1 = i;
  if( ObpTraceFlags )
    ObpPushStackInfo((_OBJECT_HEADER *)(a1 - 48), 1u, 1ui64, 0x746C6644ui64);
  ObpIncrPointerCount((_OBJECT_HEADER *)(a1 - 48));
  KeReleaseInStackQueuedSpinLockFromDpcLevel((PKLOCK_QUEUE_HANDLE)((char *)KeGetPcr()->NtTib.ArbitraryUserPointer + 160));
  __writecr8(CurrentIrql);
  return a1;
}

Referenced by:

CmpGetVolumeClusterSize
CmpVolumeManagerGetContextForFile
HalpQueryPccInterface
IoBuildPoDeviceNotifyList
IoShutdownSystem
IopFilterResourceRequirementsCall
VfIrpSendSynchronousIrp
WmipForwardWmiIrp
WmipGetFilePDO
WmipRegisterDevice