首页 > 解决方案 > WTSVirtualChannelOpen在C#中调用错误调用,getLastWin32Error()返回错误调用6,windows的invalid_invalid_handle

问题描述

在此处输入图像描述

WTSVirtualChannelOpen在C#中调用错误调用,getLastWin32Error()返回错误调用6,windows的invalid_invalid_handle

标签: winapi

解决方案


partial class Win32Api
 { 
      [DllImport("Wtsapi32.dll", SetLastError = true)]
      public static extern IntPtr WTSVirtualChannelOpen(IntPtr server, int sessionId, 
      [MarshalAs(UnmanagedType.LPStr)] string virtualName);
      [DllImport("Wtsapi32.dll", SetLastError = true)]
      public static extern IntPtr WTSVirtualChannelOpenEx(int sessionId, [ 
      MarshalAs(UnmanagedType.LPStr)] string virtualName, System.UInt32 flags);


namespace Openchannel.Util
{
    public class Channel
    {
        private const string EXT_CHAN = "shtermp";
        private IntPtr chanptr = IntPtr.Zero;
        public String Caption = "AppAuto";

        private NamedPipeServerStream m_pipe_server = null;
        private StreamWriter sw = null;
        private StreamReader sr = null;
        public int first = 0;

        public bool Open()
        {
            if (chanptr != IntPtr.Zero)
            {
                return true;
            }
            //WTS_CURRENT_SESSION;
            //chanptr = Win32Api.WTSVirtualChannelOpen(IntPtr.Zero, -1, EXT_CHAN);
            chanptr = Win32Api.WTSVirtualChannelOpenEx(-1, EXT_CHAN, 0);

        }

        public void Close()
        {
            if (chanptr != IntPtr.Zero)
            {
                Logger.Info("WTSVirtualChannelClose");
                Win32Api.WTSVirtualChannelClose(chanptr);
                chanptr = IntPtr.Zero;

            }
        }

    }
}

我尝试了 WTSVirtualChannelOpen 和 WTSVirtualChannelOpenEx 都有问题,WTSVirtualChannelOpen 在我的通话过程中被打开和关闭了几次。不知道会不会受这个影响


推荐阅读