IopCloseWaitCompletionPacket

VOID __stdcall IopCloseWaitCompletionPacket(
        _EPROCESS *Process,
        PVOID Object,
        UINT64 ProcessHandleCount,
        UINT64 SystemHandleCount){
  UINT64 *v4; 
  UINT64 *v6; 
  unsigned __int8 v7; 
  unsigned __int64 v8; 
  UINT64 v9; 
  UINT8 v10; 
  unsigned __int64 v11; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  if( SystemHandleCount == 1 )
  {
    v4 = (UINT64 *)((char *)Object + 96);
    memset(&LockHandle, 0, sizeof(LockHandle));
    KeAcquireSpinLockRaiseToDpc((UINT64 *)Object + 12, (UINT64)Object);
    v6 = (UINT64 *)*((_QWORD *)Object + 11);
    v8 = v7;
    if( v6 )
      ObfReferenceObjectWithTag(*((PVOID *)Object + 11), 0x746C6644u);
    KxReleaseSpinLock(v4);
    __writecr8(v8);
    if( v6 )
    {
      KeAcquireInStackQueuedSpinLock(v6 + 8, &LockHandle);
      KeAcquireSpinLockRaiseToDpc(v4, v9);
      v11 = v10;
      if( !*((_BYTE *)Object + 104) || !IopCancelWaitCompletionPacket((KWAIT_BLOCK *)Object, 1, v10) )
      {
        KxReleaseSpinLock(v4);
        __writecr8(v11);
      }
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      __writecr8(LockHandle.OldIrql);
      ObfDereferenceObjectWithTag(v6, 0x746C6644ui64);
    }
  }
}

Referenced by:

No references.