Channel kernel object. Channels are slightly odd kernel objects in that they must be referred to in
userspace by two handles, one for each "end" of the channel. This system call therefore returns two handles, one of
which is usually transferred to another task.
a- the virtual address to write the second handle into (only one can be returned in the status)
Uses the standard representation to return a
Result<Handle, CreateChannelError> method. Error status
1if the passed virtual address is not valid
TODO: if we ditch the ability to return an error (i.e. by making this infallible, or by saying that a null handle denotes an error but not which one), we could return both handles in the status.