winapi - WTSVirtualChannelOpen在C#中调用错误调用,getLastWin32Error()返回错误调用6,windows的invalid_invalid_handle
问题描述
WTSVirtualChannelOpen在C#中调用错误调用,getLastWin32Error()返回错误调用6,windows的invalid_invalid_handle
解决方案
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 在我的通话过程中被打开和关闭了几次。不知道会不会受这个影响
推荐阅读
- php - 通过 JQuery 将数据表中的复选框数据发送到 php 文件
- arm - 如何为 ARM Linux 设备交叉构建 luajit-5.1?(尝试构建 LÖVE 框架)
- kubernetes - 允许使用 oc/kubectl 端口转发的角色的名称是什么?
- c# - 从 transaction.Commit() 中检索 SQL 错误消息
- ionic3 - Cognito 和 Ionic 3 - 让用户保持登录状态
- android - Codenameone - Android平板电脑上的应用程序崩溃并从下一次打开一个空白的黑屏
- sql - 从超过一年前的 SQL 数据库中搜索日期
- ionic3 - Angular 2 - 反应形式的密码验证
- java - Android Studio 中的 glTexImage2D 模拟器错误
- python - get_text 不适用于 div 标签