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.