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