public static int SyscallHandler(uint syscallNumber, uint param1, uint param2, uint param3, ref uint Return2, ref uint Return3, ref uint Return4, uint callerProcesId, uint callerThreadId) { SystemCallResults result = SystemCallResults.Unhandled; switch ((SystemCallNumbers)syscallNumber) { case SystemCallNumbers.RegisterPipeOutpoint: BasicConsole.WriteLine("WM > IH > Actioning Register Pipe Outpoint system call..."); Pipes.PipeClasses Class = (Pipes.PipeClasses)param1; Pipes.PipeSubclasses Subclass = (Pipes.PipeSubclasses)param2; if (Class == Pipes.PipeClasses.Standard && Subclass == Pipes.PipeSubclasses.Standard_Out) { BasicConsole.WriteLine("WM > IH > Register Pipe Outpoint has desired pipe class and subclass."); result = SystemCallResults.RequestAction_WakeThread; Return2 = InputProcessingThreadId; InputProcessingThreadAwake = true; } break; } return((int)result); }
public static SystemCallResults GetPipeOutpoints(Pipes.PipeClasses Class, Pipes.PipeSubclasses Subclass, Pipes.PipeOutpointsRequest *RequestPtr) { uint Return1 = 0; uint Return2 = 0; uint Return3 = 0; uint Return4 = 0; Call(SystemCallNumbers.GetPipeOutpoints, (uint)Class, (uint)Subclass, (uint)RequestPtr, ref Return1, ref Return2, ref Return3, ref Return4); return((SystemCallResults)Return1); }
public static SystemCallResults RegisterPipeOutpoint(Pipes.PipeClasses Class, Pipes.PipeSubclasses Subclass, int MaxConnections) { uint Return1 = 0; uint Return2 = 0; uint Return3 = 0; uint Return4 = 0; Call(SystemCallNumbers.RegisterPipeOutpoint, (uint)Class, (uint)Subclass, (uint)MaxConnections, ref Return1, ref Return2, ref Return3, ref Return4); return((SystemCallResults)Return1); }
public static SystemCallResults WaitOnPipeCreate(Pipes.PipeClasses Class, Pipes.PipeSubclasses Subclass, out int NewPipeId) { uint Return1 = 0; uint Return2 = 0; uint Return3 = 0; uint Return4 = 0; Call(SystemCallNumbers.WaitOnPipeCreate, (uint)Class, (uint)Subclass, 0, ref Return1, ref Return2, ref Return3, ref Return4); NewPipeId = (int)Return2; return((SystemCallResults)Return1); }
public static SystemCallResults GetNumPipeOutpoints(Pipes.PipeClasses Class, Pipes.PipeSubclasses Subclass, out int NumOutpoints) { uint Return1 = 0; uint Return2 = 0; uint Return3 = 0; uint Return4 = 0; Call(SystemCallNumbers.GetNumPipeOutpoints, (uint)Class, (uint)Subclass, 0, ref Return1, ref Return2, ref Return3, ref Return4); NumOutpoints = (int)Return2; return((SystemCallResults)Return1); }
/// <summary> /// Gets the outpoint desciptors of the available outpoints of the specified class and subclass. /// </summary> /// <param name="numOutpoints">The known number of available outpoints. Use GetNumPipeOutpoints to obtain this number.</param> /// <param name="SysCallResult">Out : The result of the system call. Check this is set to OK.</param> /// <param name="OutpointDescriptors">Out : The array of outpoint descriptors.</param> /// <param name="Class">The class of pipe to search for.</param> /// <param name="Subclass">The subclass of pipe to search for.</param> public static void GetOutpointDescriptors(int numOutpoints, out SystemCallResults SysCallResult, out Pipes.PipeOutpointDescriptor[] OutpointDescriptors, Pipes.PipeClasses Class, Pipes.PipeSubclasses Subclass) { OutpointDescriptors = new Pipes.PipeOutpointDescriptor[numOutpoints]; Pipes.PipeOutpointsRequest *RequestPtr = (Pipes.PipeOutpointsRequest *)Heap.AllocZeroed((uint)sizeof(Pipes.PipeOutpointsRequest), "BasicServerHelpers : Alloc PipeOutpointsRequest"); if (RequestPtr != null) { try { RequestPtr->MaxDescriptors = numOutpoints; RequestPtr->Outpoints = (Pipes.PipeOutpointDescriptor *)((byte *)Utilities.ObjectUtilities.GetHandle(OutpointDescriptors) + FOS_System.Array.FieldsBytesSize); if (RequestPtr->Outpoints != null) { SysCallResult = SystemCalls.GetPipeOutpoints(Class, Subclass, RequestPtr); switch (SysCallResult) { case SystemCallResults.Unhandled: //BasicConsole.WriteLine("BasicServerHelpers > GetPipeOutpoints: Unhandled!"); break; case SystemCallResults.Fail: //BasicConsole.WriteLine("BasicServerHelpers > GetPipeOutpoints: Failed!"); break; case SystemCallResults.OK: //BasicConsole.WriteLine("BasicServerHelpers > GetPipeOutpoints: Succeeded."); break; default: //BasicConsole.WriteLine("BasicServerHelpers > GetPipeOutpoints: Unexpected system call result!"); break; } } else { SysCallResult = SystemCallResults.Fail; //BasicConsole.WriteLine("BasicServerHelpers > RequestPtr->Outpoints null! No memory allocated."); ExceptionMethods.Throw(new FOS_System.Exceptions.ArgumentException("BasicServerHelpers : Couldn't allocate memory outpoints list in outpoints request!")); } } finally { Heap.Free(RequestPtr); } } else { SysCallResult = SystemCallResults.Fail; //BasicConsole.WriteLine("BasicServerHelpers > RequestPtr null! No memory allocated."); ExceptionMethods.Throw(new FOS_System.Exceptions.ArgumentException("BasicServerHelpers : Couldn't allocate memory get outpoints request!")); } }
/// <summary> /// Gets the number of available outpoints of the specified class and subclass. /// </summary> /// <param name="numOutpoints">Out : The number of outpoints (correct iff SysCallResult is OK).</param> /// <param name="SysCallResult">Out : The result of the system call. Check this is set to OK.</param> /// <param name="Class">The class of pipe to search for.</param> /// <param name="Subclass">The subclass of pipe to search for.</param> public static void GetNumPipeOutpoints(out int numOutpoints, out SystemCallResults SysCallResult, Pipes.PipeClasses Class, Pipes.PipeSubclasses Subclass) { SysCallResult = SystemCalls.GetNumPipeOutpoints(Class, Subclass, out numOutpoints); switch (SysCallResult) { case SystemCallResults.Unhandled: //BasicConsole.WriteLine("BasicServerHelpers > GetNumPipeOutpoints: Unhandled!"); break; case SystemCallResults.Fail: //BasicConsole.WriteLine("BasicServerHelpers > GetNumPipeOutpoints: Failed!"); break; case SystemCallResults.OK: //BasicConsole.WriteLine("BasicServerHelpers > GetNumPipeOutpoints: Succeeded."); //BasicConsole.Write("BasicServerHelpers > Num pipe outpoints: "); //BasicConsole.WriteLine(numOutpoints); break; default: //BasicConsole.WriteLine("BasicServerHelpers > GetNumPipeOutpoints: Unexpected system call result!"); break; } }