IopDequeueIrpFromThread
VOID __stdcall IopDequeueIrpFromThread(_IRP *Irp){
__int64 v1;
unsigned __int8 CurrentIrql;
__int64 v4;
_QWORD *v5;
_QWORD *v6;
v1 = *((_QWORD *)Irp + 19);
CurrentIrql = 0;
if( v1 )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
if( _interlockedbittestandset64((volatile signed __int32 *)(v1 + 1416), 0i64) )
KxWaitForSpinLockAndAcquire((UINT64 *)(v1 + 1416));
}
v4 = *((_QWORD *)Irp + 4);
v5 = (_QWORD *)((char *)Irp + 32);
v6 = (_QWORD *)*((_QWORD *)Irp + 5);
if( *(_IRP **)(v4 + 8) != (_IRP *)((char *)Irp + 32) || (_QWORD *)*v6 != v5 )
__fastfail(3u);
*v6 = v4;
*(_QWORD *)(v4 + 8) = v6;
*((_QWORD *)Irp + 5) = (char *)Irp + 32;
*v5 = v5;
if( v1 )
{
_InterlockedAnd64((volatile signed __int64 *)(v1 + 1416), 0i64);
__writecr8(CurrentIrql);
}
}Referenced by:
IoCancelFileOpen
IopCloseFile
IopCompleteRequest
IopDeleteFile
IopParseDevice
IopfCompleteRequest