Ejemplo n.º 1
0
        public new static KernelResult RemoveName(Horizon System, string Name)
        {
            KAutoObject FoundObj = KAutoObject.FindNamedObject(System, Name);

            if (!(FoundObj is KClientPort))
            {
                return(KernelResult.NotFound);
            }

            return(KAutoObject.RemoveName(System, Name));
        }
Ejemplo n.º 2
0
        private KernelResult ConnectToNamedPort(ulong namePtr, out int handle)
        {
            handle = 0;

            if (!KernelTransfer.UserToKernelString(_system, namePtr, 12, out string name))
            {
                return(KernelResult.UserCopyFailed);
            }

            if (name.Length > 11)
            {
                return(KernelResult.MaximumExceeded);
            }

            KAutoObject autoObj = KAutoObject.FindNamedObject(_system, name);

            if (!(autoObj is KClientPort clientPort))
            {
                return(KernelResult.NotFound);
            }

            KProcess currentProcess = _system.Scheduler.GetCurrentProcess();

            KernelResult result = currentProcess.HandleTable.ReserveHandle(out handle);

            if (result != KernelResult.Success)
            {
                return(result);
            }

            result = clientPort.Connect(out KClientSession clientSession);

            if (result != KernelResult.Success)
            {
                currentProcess.HandleTable.CancelHandleReservation(handle);

                return(result);
            }

            currentProcess.HandleTable.SetReservedHandleObj(handle, clientSession);

            clientSession.DecrementReferenceCount();

            return(result);
        }