Code Monkey home page Code Monkey logo

Comments (8)

HavenDV avatar HavenDV commented on May 26, 2024 1

I have moved PipeConnection.PipeStream to public properties for advanced use.

/// <summary>
/// Raw pipe stream. You can cast it to <see cref="NamedPipeClientStream"/> or <see cref="NamedPipeServerStream"/>.
/// </summary>
public PipeStream PipeStream { get; }

from h.pipes.

AtleC avatar AtleC commented on May 26, 2024 1

Absolutely, thanks for all the help.
H.Pipes looks like a promising project 👍

from h.pipes.

HavenDV avatar HavenDV commented on May 26, 2024

Added in the latest release. Usage:

server.ClientConnected += async (o, args) =>
{
    var name = args.Connection.GetImpersonationUserName();

    Console.WriteLine($"Client {name} is now connected!");
};

from h.pipes.

AtleC avatar AtleC commented on May 26, 2024

Nice!

It seems like there is an issue with the latest versions (1.15.7 and 1.15.8) in nuget tho:
image

I get this when trying to debug in Visual studio 2022, with 1.15.6 it works

from h.pipes.

HavenDV avatar HavenDV commented on May 26, 2024

Yes, I forgot to release new versions of Formatter packages after refactoring. Should be fixed in the latest version.

from h.pipes.

AtleC avatar AtleC commented on May 26, 2024

Awesome, that worked 👍

Looking further into it, there also seems like there is a way to get the PID of the client process

`[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool GetNamedPipeClientProcessId(IntPtr Pipe, out int ClientProcessId);

int GetNamedPipeClientProcessId(NamedPipeServerStream pipeServer)
{
var hPipe = pipeServer.SafePipeHandle.DangerousGetHandle();

if (GetNamedPipeClientProcessId(hPipe, out var clientProcessId))
{
    return clientProcessId;
}
else
{
    var error = Marshal.GetLastWin32Error();
    return 0;
}

}`

This works great if called straight from the NamedPipeServerStream, but this is not exposed in H.Pipes.

Could this also be implemented?
I took a stab at it myself but have not yet found a way to import GetNamedPipeClientProcessId into H.Pipes.
A possible solution could be to pass the NamedPipeServerStream into ConnectionEventArgs, but I guess that would be less than optimal.

from h.pipes.

AtleC avatar AtleC commented on May 26, 2024

I found a way 🤡

I'm not quite sure were to place the dll reference, I did a temporary placement in EventExtensions.cs
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetNamedPipeClientProcessId(IntPtr Pipe, out int ClientProcessId);
and then just place this in PipeConnection.cs
` ///


/// Gets the process PID of the client on the other end of the pipe.
///

/// The process PID of the client on the other end of the pipe.
/// is not .
/// No pipe connections have been made yet.
/// The connected pipe has already disconnected.
/// The pipe handle has not been set.
/// The pipe is closed.
/// The pipe connection has been broken.
/// The process PID of the client is longer than 19 characters.
public int GetNamedPipeClientProcessId()
{
if (PipeStream is not NamedPipeServerStream serverStream)
{
throw new InvalidOperationException($"{nameof(PipeStream)} is not {nameof(NamedPipeServerStream)}.");
}

    var hPipe = PipeStream.SafePipeHandle.DangerousGetHandle();

    if (EventExtensions.GetNamedPipeClientProcessId(hPipe, out var clientProcessId))
    {
        return clientProcessId;
    }
    else
    {
        var error = Marshal.GetLastWin32Error();
        return 0;
    }
}

`

We can then call it the same way as GetImpersonationUserName

var test = args.Connection.GetNamedPipeClientProcessId();

from h.pipes.

HavenDV avatar HavenDV commented on May 26, 2024

I am guessing that you can just add an Extension method for the PipeConnection.
I don't want to add Win32 API calls to the library at the moment.

from h.pipes.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.