Exemple #1
0
    public static IntPtr DuplicateTargetProcessSocket(Process targetProcess)
    {
        IntPtr targetSocketHandle = IntPtr.Zero;
        IntPtr dupSocketHandle    = IntPtr.Zero;

        targetSocketHandle = GetSocketTargetProcess(targetProcess);
        if (targetSocketHandle == IntPtr.Zero)
        {
            throw new ConPtyShellException("No \\Device\\Afd objects found. Socket duplication failed.");
        }
        else
        {
            WSAPROTOCOL_INFO wsaProtocolInfo = new WSAPROTOCOL_INFO();
            WSAData          data;
            if (WSAStartup(2 << 8 | 2, out data) != 0)
            {
                throw new ConPtyShellException(String.Format("WSAStartup failed with error code: {0}", WSAGetLastError()));
            }
            int status = WSADuplicateSocket(targetSocketHandle, Process.GetCurrentProcess().Id, ref wsaProtocolInfo);
            if (status != 0)
            {
                Console.WriteLine("WSADuplicateSocket failed with error " + status.ToString() + " and wsalasterror " + WSAGetLastError().ToString());
                return(dupSocketHandle);
            }
            dupSocketHandle = WSASocket(wsaProtocolInfo.iAddressFamily, wsaProtocolInfo.iSocketType, wsaProtocolInfo.iProtocol, ref wsaProtocolInfo, 0, WSA_FLAG_OVERLAPPED);
            if (dupSocketHandle == IntPtr.Zero || dupSocketHandle == new IntPtr(-1))
            {
                Console.WriteLine("WSASocket failed with error " + WSAGetLastError().ToString());
                return(dupSocketHandle);
            }
            //Console.WriteLine("WSASocket success handlex 0x" + dupSocketHandle.ToString("X4"));
        }
        return(dupSocketHandle);
    }
Exemple #2
0
 static extern int WSADuplicateSocket(IntPtr s, uint dwProcessId, out WSAPROTOCOL_INFO lpProtocolInfo);
Exemple #3
0
 private static extern IntPtr WSASocket([In] int addressFamily, [In] int socketType, [In] int protocolType, ref WSAPROTOCOL_INFO lpProtocolInfo, Int32 group1, int dwFlags);
Exemple #4
0
 private static extern int WSADuplicateSocket(IntPtr socketHandle, int processId, ref WSAPROTOCOL_INFO pinnedBuffer);