==== VioModeUndo ==== **Bindings**: [[modeundo#C bindings|C]], [[modeundo#MASM bindings|MASM]] This call allows one thread within a process to cancel a [[modewait|VioModeWait]] issued by another thread within the same process. //VioModeUndo// (OwnerIndic, KillIndic, Reserved) //OwnerIndic// (**USHORT**) - input Indicates whether the thread issuing [[modeundo|VioModeUndo]] wants ownership of [[modewait|VioModeWait]] to be reserved for its process. ^Value ^Definition ^ |0 |Reserve ownership | |1 |Give up ownership. | //KillIndic// (**USHORT**) - input Indicates whether the thread (with the outstanding VioModeWait) should be returned an error code or be terminated. ^Value ^Definition ^ |0 |Return error code | |1 |Terminate thread. | //Reserved// (**USHORT**) - input Reserved word of 0s. //rc// (**USHORT**) - return Return code descriptions are: |0 |NO_ERROR | |421 |ERROR_VIO_INVALID_PARMS | |422 |ERROR_VIO_FUNCTION_OWNED | |427 |ERROR_VIO_NO_MODE_THREAD | |430 |ERROR_VIO_ILLEGAL_DURING_POPUP | |465 |ERROR_VIO_DETACHED | |486 |ERROR_VIO_BAD_RESERVE | |494 |ERROR_VIO_EXTENDED_SG | **Remarks** [[modeundo|VioModeUndo]] may be issued only by a thread within the process that owns [[modewait|VioModeWait]]. The thread issuing [[modeundo|VioModeUndo]] can either reserve ownership of the [[modewait|VioModeWait]] function for its process or give up ownership. The thread whose [[modewait|VioModeWait]] is cancelled is optionally terminated. === C bindings === #define INCL_VIO USHORT rc = VioModeUndo(OwnerIndic, KillIndic, Reserved); USHORT OwnerIndic; /* Ownership indicator */ USHORT KillIndic; /* Terminate indicator */ USHORT Reserved; /* Reserved (must be zero) */ USHORT rc; /* return code */ === MASM bindings === EXTRN VioModeUndo:FAR INCL_VIO EQU 1 PUSH WORD OwnerIndic ;Ownership indicator PUSH WORD KillIndic ;Terminate indicator PUSH WORD Reserved ;Reserved (must be zero) CALL VioModeUndo Returns WORD