IopDequeueIrpFromFileObject

VOID __stdcall IopDequeueIrpFromFileObject(_IRP *Irp, _FILE_OBJECT *FileObject){
  unsigned __int64 *p_IrpListLock; 
  _QWORD *v4; 
  unsigned __int8 v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  _QWORD *v8; 
  __int64 v9; 
  p_IrpListLock = &FileObject->IrpListLock;
  KeAcquireSpinLockRaiseToDpc(&FileObject->IrpListLock, (UINT64)FileObject);
  v4 = (_QWORD *)((char *)Irp + 32);
  v6 = v5;
  v7 = *((_QWORD *)Irp + 4);
  v8 = (_QWORD *)*((_QWORD *)Irp + 5);
  if( *(_IRP **)(v7 + 8) != (_IRP *)((char *)Irp + 32) || (_QWORD *)*v8 != v4 )
    __fastfail(3u);
  *v8 = v7;
  *(_QWORD *)(v7 + 8) = v8;
  v9 = *((_QWORD *)Irp + 11);
  *((_QWORD *)Irp + 5) = (char *)Irp + 32;
  *v4 = v4;
  ObfDereferenceObjectWithTag((PVOID)(v9 & 0xFFFFFFFFFFFFFFF9ui64), 0x70436F49ui64);
  *((_DWORD *)Irp + 4) = *((_DWORD *)Irp + 4) & 0xFFFF5FFF | 0x8000;
  KxReleaseSpinLock(p_IrpListLock);
  __writecr8(v6);
}

Referenced by:

IopCompleteRequest
IopDropIrp