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.