From 83f80318623d51e59e6ec7fd2d51001131458c65 Mon Sep 17 00:00:00 2001 From: Matthias Heil Date: Tue, 31 Mar 2026 18:48:55 +0200 Subject: [PATCH] not working --- .../DebugVisualizer/DebugVisualizer.csproj | 14 ++++ Vector3Visualizer/DebugVisualizer/Program.cs | 2 + .../NamedPipes/NamedPipes.csproj | 7 ++ .../NamedPipes/ReadFileToStream.cs | 23 +++++++ Vector3Visualizer/NamedPipes/Receiver.cs | 65 +++++++++++++++++++ Vector3Visualizer/NamedPipes/Sender.cs | 40 ++++++++++++ Vector3Visualizer/NamedPipes/StreamString.cs | 47 ++++++++++++++ Vector3Visualizer/Vecor3Visualizer.slnx | 4 ++ .../Vector3DebuggerVisualizerProvider.cs | 1 - .../Vector3Visualizer.csproj | 1 + .../Vector3ObjectSource.cs | 8 +++ .../Vector3VisualizerSource.csproj | 4 ++ 12 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 Vector3Visualizer/DebugVisualizer/DebugVisualizer.csproj create mode 100644 Vector3Visualizer/DebugVisualizer/Program.cs create mode 100644 Vector3Visualizer/NamedPipes/NamedPipes.csproj create mode 100644 Vector3Visualizer/NamedPipes/ReadFileToStream.cs create mode 100644 Vector3Visualizer/NamedPipes/Receiver.cs create mode 100644 Vector3Visualizer/NamedPipes/Sender.cs create mode 100644 Vector3Visualizer/NamedPipes/StreamString.cs diff --git a/Vector3Visualizer/DebugVisualizer/DebugVisualizer.csproj b/Vector3Visualizer/DebugVisualizer/DebugVisualizer.csproj new file mode 100644 index 0000000..be29180 --- /dev/null +++ b/Vector3Visualizer/DebugVisualizer/DebugVisualizer.csproj @@ -0,0 +1,14 @@ + + + + Exe + net10.0 + enable + enable + + + + + + + diff --git a/Vector3Visualizer/DebugVisualizer/Program.cs b/Vector3Visualizer/DebugVisualizer/Program.cs new file mode 100644 index 0000000..1dd89cf --- /dev/null +++ b/Vector3Visualizer/DebugVisualizer/Program.cs @@ -0,0 +1,2 @@ +var pipeServer = new NamedPipes.Receiver(); +pipeServer.Start(); diff --git a/Vector3Visualizer/NamedPipes/NamedPipes.csproj b/Vector3Visualizer/NamedPipes/NamedPipes.csproj new file mode 100644 index 0000000..dbdcea4 --- /dev/null +++ b/Vector3Visualizer/NamedPipes/NamedPipes.csproj @@ -0,0 +1,7 @@ + + + + netstandard2.0 + + + diff --git a/Vector3Visualizer/NamedPipes/ReadFileToStream.cs b/Vector3Visualizer/NamedPipes/ReadFileToStream.cs new file mode 100644 index 0000000..d43f9a0 --- /dev/null +++ b/Vector3Visualizer/NamedPipes/ReadFileToStream.cs @@ -0,0 +1,23 @@ +using System.IO; + +namespace NamedPipes +{ + // Contains the method executed in the context of the impersonated user + public class ReadFileToStream + { + private readonly string fn; + private readonly StreamString ss; + + public ReadFileToStream(StreamString str, string filename) + { + fn = filename; + ss = str; + } + + public void Start() + { + string contents = File.ReadAllText(fn); + ss.WriteString(contents); + } + } +} diff --git a/Vector3Visualizer/NamedPipes/Receiver.cs b/Vector3Visualizer/NamedPipes/Receiver.cs new file mode 100644 index 0000000..6b16d99 --- /dev/null +++ b/Vector3Visualizer/NamedPipes/Receiver.cs @@ -0,0 +1,65 @@ +using System; +using System.IO; +using System.IO.Pipes; +using System.Text; +using System.Threading; + +namespace NamedPipes +{ + + public class Receiver + { + public readonly static string PipeName = "testpipe"; + public Receiver() + { + } + ~Receiver() + { + } + public void Start() + { + while (true) + { + var pipeServer = new NamedPipeServerStream(PipeName, PipeDirection.InOut); + int threadId = Thread.CurrentThread.ManagedThreadId; + + // Wait for a client to connect + pipeServer.WaitForConnection(); + Console.WriteLine($"Client connected on thread[{threadId}]."); + try + { + // Read the request from the client. Once the client has + // written to the pipe its security token will be available. + + StreamString stream = new StreamString(pipeServer); + + // Verify our identity to the connected client using a + // string that the client anticipates. + + stream.WriteString("I am the one true server!"); + string message = stream.ReadString(); + Console.WriteLine($"Received: {message}"); + + + // Read in the contents of the file while impersonating the client. + //ReadFileToStream fileReader = new ReadFileToStream(ss, filename); + + // Display the name of the user we are impersonating. + //Console.WriteLine($"Reading file: {filename} on thread[{threadId}] as user: {pipeServer.GetImpersonationUserName()}."); + //pipeServer.RunAsClient(fileReader.Start); + } + // Catch the IOException that is raised if the pipe is broken + // or disconnected. + catch (IOException e) + { + Console.WriteLine($"ERROR: {e.Message}"); + } + finally + { + pipeServer.Dispose(); + } + } + + } + } +} diff --git a/Vector3Visualizer/NamedPipes/Sender.cs b/Vector3Visualizer/NamedPipes/Sender.cs new file mode 100644 index 0000000..aa13840 --- /dev/null +++ b/Vector3Visualizer/NamedPipes/Sender.cs @@ -0,0 +1,40 @@ +using System; +using System.IO.Pipes; +using System.Security.Principal; +using System.Threading; + + +namespace NamedPipes +{ + public class Sender + { + public Sender() { } + public void SendMessage(string message) + { + var pipeClient = new NamedPipeClientStream(".", Receiver.PipeName, PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation); + Console.WriteLine("Connecting to server...\n"); + pipeClient.Connect(5000); + Console.WriteLine("Connected.\n"); + + var ss = new StreamString(pipeClient); + // Validate the server's signature string. + if (ss.ReadString() == "I am the one true server!") + { + // The client security token is sent with the first write. + // Send the name of the file whose contents are returned + // by the server. + ss.WriteString(message); + + // Print the file to the screen. + Console.Write(ss.ReadString()); + } + else + { + Console.WriteLine("Server could not be verified."); + } + pipeClient.Dispose(); + // Give the client process some time to display results before exiting. + Thread.Sleep(100); + } + } +} \ No newline at end of file diff --git a/Vector3Visualizer/NamedPipes/StreamString.cs b/Vector3Visualizer/NamedPipes/StreamString.cs new file mode 100644 index 0000000..6a5cea2 --- /dev/null +++ b/Vector3Visualizer/NamedPipes/StreamString.cs @@ -0,0 +1,47 @@ +using System; +using System.IO; +using System.Text; + + +namespace NamedPipes +{ + // Defines the data protocol for reading and writing strings on our stream. + public class StreamString + { + private readonly Stream ioStream; + private readonly UnicodeEncoding streamEncoding; + + public StreamString(Stream ioStream) + { + this.ioStream = ioStream; + streamEncoding = new UnicodeEncoding(); + } + + public string ReadString() + { + int len; + len = ioStream.ReadByte() * 256; + len += ioStream.ReadByte(); + var inBuffer = new byte[len]; + ioStream.Read(inBuffer, 0, len); + + return streamEncoding.GetString(inBuffer); + } + + public int WriteString(string outString) + { + byte[] outBuffer = streamEncoding.GetBytes(outString); + int len = outBuffer.Length; + if (len > UInt16.MaxValue) + { + len = (int)UInt16.MaxValue; + } + ioStream.WriteByte((byte)(len / 256)); + ioStream.WriteByte((byte)(len & 255)); + ioStream.Write(outBuffer, 0, len); + ioStream.Flush(); + + return outBuffer.Length + 2; + } + } +} diff --git a/Vector3Visualizer/Vecor3Visualizer.slnx b/Vector3Visualizer/Vecor3Visualizer.slnx index 740585f..795fcd9 100644 --- a/Vector3Visualizer/Vecor3Visualizer.slnx +++ b/Vector3Visualizer/Vecor3Visualizer.slnx @@ -1,4 +1,8 @@ + + + + diff --git a/Vector3Visualizer/Vector3Visualizer/Vector3DebuggerVisualizerProvider.cs b/Vector3Visualizer/Vector3Visualizer/Vector3DebuggerVisualizerProvider.cs index d5f008d..e4d11fe 100644 --- a/Vector3Visualizer/Vector3Visualizer/Vector3DebuggerVisualizerProvider.cs +++ b/Vector3Visualizer/Vector3Visualizer/Vector3DebuggerVisualizerProvider.cs @@ -2,7 +2,6 @@ using Microsoft.VisualStudio.Extensibility.DebuggerVisualizers; using Microsoft.VisualStudio.RpcContracts.RemoteUI; using System.Collections.Generic; -using System.Linq; using System.Numerics; using System.Threading; using System.Threading.Tasks; diff --git a/Vector3Visualizer/Vector3Visualizer/Vector3Visualizer.csproj b/Vector3Visualizer/Vector3Visualizer/Vector3Visualizer.csproj index 47f5a35..f1e1206 100644 --- a/Vector3Visualizer/Vector3Visualizer/Vector3Visualizer.csproj +++ b/Vector3Visualizer/Vector3Visualizer/Vector3Visualizer.csproj @@ -15,6 +15,7 @@ + diff --git a/Vector3Visualizer/Vector3VisualizerSource/Vector3ObjectSource.cs b/Vector3Visualizer/Vector3VisualizerSource/Vector3ObjectSource.cs index d5b1a9f..75e9210 100644 --- a/Vector3Visualizer/Vector3VisualizerSource/Vector3ObjectSource.cs +++ b/Vector3Visualizer/Vector3VisualizerSource/Vector3ObjectSource.cs @@ -1,4 +1,5 @@ using Microsoft.VisualStudio.DebuggerVisualizers; +using NamedPipes; using System.Collections.Generic; using System.Diagnostics; using System.IO; @@ -9,6 +10,12 @@ namespace Vector3VisualizerSource; public class Vector3ObjectSource : VisualizerObjectSource { + public static void Send(Vector3Model vector3Model) + { + var pipeClient = new Sender(); + + pipeClient.SendMessage($"Hello from {nameof(Vector3ObjectSource)}"); + } public Vector3ObjectSource():base() { Debug.WriteLine("new Vector3ObjectSource"); @@ -29,6 +36,7 @@ public class Vector3ObjectSource : VisualizerObjectSource { vector3Model.Quaternion = quaternion.ToString(); } + Send(vector3Model); SerializeAsJson(outgoingData, vector3Model); } } \ No newline at end of file diff --git a/Vector3Visualizer/Vector3VisualizerSource/Vector3VisualizerSource.csproj b/Vector3Visualizer/Vector3VisualizerSource/Vector3VisualizerSource.csproj index d6acc0f..3a9efd4 100644 --- a/Vector3Visualizer/Vector3VisualizerSource/Vector3VisualizerSource.csproj +++ b/Vector3Visualizer/Vector3VisualizerSource/Vector3VisualizerSource.csproj @@ -11,4 +11,8 @@ + + + +