PnpGetRelatedTargetDevice

NTSTATUS __fastcall PnpGetRelatedTargetDevice(PFILE_OBJECT FileObject, _QWORD *a2){
  KIRQL v4; 
  _DEVICE_OBJECT *RelatedDeviceObject; 
  PVOID v6; 
  NTSTATUS v7; 
  NTSTATUS v8; 
  __int64 v9; 
  __int64 v10; 
  INT64 result; 
  int v12; 
  _DEVICE_OBJECT *v13; 
  PFILE_OBJECT v14; 
  PVOID P; 
  P = 0i64;
  *a2 = 0i64;
  v4 = KeAcquireQueuedSpinLock(0xAui64);
  RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
  KeReleaseQueuedSpinLock(0xAui64, v4);
  if( !RelatedDeviceObject )
    return -1073741810;
  memset((INT64)&result, 0i64);
  LOWORD(result) = 1819;
  v12 = 4;
  v13 = RelatedDeviceObject;
  v14 = FileObject;
  v7 = PnpSendIrp(RelatedDeviceObject, (PIO_STACK_LOCATION)&result, v6, 0i64, &P);
  v8 = v7;
  if( v7 < 0 )
    return v7;
  if( !P )
    return -1073741810;
  v9 = *(_DWORD *)P == 1 ? *((_QWORD *)P + 1) : 0i64;
  ExFreePoolWithTag(P, 0);
  if( !v9 )
    return -1073741810;
  v10 = *(_QWORD *)(*(_QWORD *)(v9 + 312) + 40i64);
  if( !v10 )
    return -1073741810;
  *a2 = v10;
  return v8;
}

Referenced by:

IoGetRelatedTargetDevice
IoRegisterPlugPlayNotification
PiUEventGetDeviceInstanceIdFromUserHandle