IopDisassociateThreadIrp
VOID __stdcall IopDisassociateThreadIrp(){
INT64 v0;
INT64 v1;
unsigned __int8 CurrentIrql;
unsigned int *p_SystemCallNumber;
UINT8 v4;
_QWORD *v5;
UINT8 v6;
_QWORD *v7;
__int64 v8;
_QWORD *v9;
__int64 v10;
__int64 v11;
_ADAPTER_OBJECT *v12;
_DWORD *ErrorLogEntry;
CurrentIrql = KeGetCurrentIrql();
__writecr8(1ui64);
p_SystemCallNumber = &KeGetCurrentThread()[1].SystemCallNumber;
if( *(unsigned int **)p_SystemCallNumber == p_SystemCallNumber )
goto LABEL_4;
v4 = KeAcquireQueuedSpinLock(11i64, v0, v1);
v5 = *(_QWORD **)p_SystemCallNumber;
v6 = v4;
if( *(char *)(*(_QWORD *)p_SystemCallNumber + 35i64) == *(char *)(*(_QWORD *)p_SystemCallNumber + 34i64) + 2 )
{
KeReleaseQueuedSpinLock(LockQueueIoCompletionLock, v4);
LABEL_4:
__writecr8(CurrentIrql);
return;
}
ObfReferenceObjectWithTag((VOID *)v5[15], 0x746C6644ui64);
v7 = *(_QWORD **)p_SystemCallNumber;
v8 = **(_QWORD **)p_SystemCallNumber;
if( *(unsigned int **)(*(_QWORD *)p_SystemCallNumber + 8i64) != p_SystemCallNumber
|| *(_QWORD **)(v8 + 8) != v7
|| (*(_QWORD *)p_SystemCallNumber = v8,
*(_QWORD *)(v8 + 8) = p_SystemCallNumber,
v5[1] = v5,
*v5 = v5,
v9 = (_QWORD *)*(&stru_140C452E0 + 273),
(_UNKNOWN *)**(&stru_140C452E0 + 273) != (_UNKNOWN *)((char *)&stru_140C452E0 + 2176)) )
{
__fastfail(3u);
}
*v7 = (char *)&stru_140C452E0 + 2176;
v7[1] = v9;
*v9 = v7;
*(&stru_140C452E0 + 273) = v7;
if( *((_BYTE *)v5 + 35) <= *((_BYTE *)v5 + 34)
&& (v11 = v5[20]) != 0
&& (v10 = v5[19], v12 = *(_ADAPTER_OBJECT **)(v10 + 40), *(_ADAPTER_OBJECT **)(v11 + 8) == v12) )
{
ObfReferenceObjectWithTag(*(VOID **)(v10 + 40), 0x746C6644ui64);
}
else
{
v12 = 0i64;
}
KeReleaseQueuedSpinLock(LockQueueIoCompletionLock, v6);
__writecr8(CurrentIrql);
if( v12 )
{
ErrorLogEntry = IoAllocateErrorLogEntry(v12, 0x30u);
if( ErrorLogEntry )
{
ErrorLogEntry[3] = -2147221450;
IoWriteErrorLogEntry(ErrorLogEntry);
}
HalPutDmaAdapter(v12);
}
}Referenced by:
IoCancelThreadIo