NtCancelWaitCompletionPacket
NTSTATUS __stdcall NtCancelWaitCompletionPacket(PVOID WaitCompletionPacketHandle, UINT8 RemoveSignaledPacket){
NTSTATUS result;
UINT64 v4;
NTSTATUS v5;
PVOID v6;
UINT64 *v7;
UINT64 *v8;
unsigned __int8 v9;
unsigned __int64 v10;
UINT64 v11;
UINT8 v12;
unsigned __int64 v13;
struct _KLOCK_QUEUE_HANDLE LockHandle;
PVOID Object;
memset(&LockHandle, 0, sizeof(LockHandle));
Object = 0i64;
result = ObReferenceObjectByHandle(
WaitCompletionPacketHandle,
1u,
IopWaitCompletionPacketObjectType,
*((_BYTE *)KeGetCurrentThread() + 562),
&Object,
0i64);
v5 = result;
if( result >= 0 )
{
v6 = Object;
v7 = (UINT64 *)((char *)Object + 96);
KeAcquireSpinLockRaiseToDpc((UINT64 *)Object + 12, v4);
v8 = (UINT64 *)*((_QWORD *)v6 + 11);
v10 = v9;
if( v8 )
ObfReferenceObjectWithTag(*((PVOID *)v6 + 11), 0x746C6644u);
KxReleaseSpinLock(v7);
__writecr8(v10);
if( !v8 )
return -1073741536;
KeAcquireInStackQueuedSpinLock(v8 + 8, &LockHandle);
KeAcquireSpinLockRaiseToDpc(v7, v11);
v13 = v12;
if( *((_BYTE *)v6 + 104) )
{
if( IopCancelWaitCompletionPacket((KWAIT_BLOCK *)Object, RemoveSignaledPacket, v12) )
{
LABEL_7:
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
ObfDereferenceObjectWithTag(v8, 0x746C6644ui64);
ObfDereferenceObjectWithTag(Object, 0x746C6644ui64);
return v5;
}
if( *((_BYTE *)v6 + 104) )
v5 = 259;
}
else
{
v5 = -1073741536;
}
KxReleaseSpinLock(v7);
__writecr8(v13);
goto LABEL_7;
}
return result;
}Referenced by:
No references.