问题标签 [virtual-channel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
535 浏览

c# - 我可以使用 RDP 虚拟通道将消息从客户端应用程序发送到服务器端应用程序吗?

我们的集成合作伙伴之一正在将他们的产品迁移到终端服务。虽然他们的产品将存在于终端服务会话中,但他们不允许第三方在同一会话中运行他们的应用程序。

我们的集成要求我们的应用程序使用内置 API 向合作伙伴产品发送消息。这些 API 尚未更新以允许跨 RDP 会话进行通信。我们希望能够通过代理以虚拟通道的形式发送这些消息。这些消息将由 RDP 会话接收,转发到合作伙伴应用程序,并且任何响应都通过通道返回到我们的应用程序。

但是,我在网上找到的所有文章都围绕着服务器向客户端发送消息的过程。反过来可能吗?

0 投票
0 回答
645 浏览

c# - SEHException when calling WTSVirtualChannelClose

I'm building application that will communicate with server using Remote Desktop Service API.
I'm building my application using code found here: https://code.google.com/p/tstunnels/ and here: http://www.codeproject.com/Articles/16374/How-to-Write-a-Terminal-Services-Add-in-in-Pure-C
I build client library that is loaded when I do Remote Desktop Connection and I'm able to send and receive messages.

On server side I get SEHException when I'm trying to close my application.

I use this methods using DLLImport:

Then inside my application I'm doing this:

After that I'm able to write and read thru Virtual Channel, but when I try to close using below code I get error.

Here is error:

System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an exception. at Server.Native.WTSVirtualChannelClose(IntPtr channelHandle) at Server.Server.Disconnect() in i:\Tomka\TS\v2\TSAddin\Server\Server.cs:line 73

I tried getting last Win32Error using Marshal.GetLastWin32Error() but it is returning 1008.

Looking in msdn I found that error description:

ERROR_NO_TOKEN 1008 (0x3F0) An attempt was made to reference a token that does not exist.

I found article on MSDN but code is in C++ so that didn't help, anyway here is the link: http://msdn.microsoft.com/en-us/library/aa383852(v=vs.85).aspx

EDIT 1 I did as @Hans wrote. Here is first exception I got:

First-chance exception at 0x00000000771105B7 (ntdll.dll) in Server.exe: 0xC0000008: An invalid handle was specified.

EDIT 2

Here are classes I'm using on server:

and Server.cs:

and usage looks like this:

In main form constructor I'm creating server object, in Load I'm calling Server.Connect() and in FormClosed Server.Disconnect().

0 投票
1 回答
226 浏览

c++ - 如何在 Visual Studio 2012 中引用 CChannel.h?

我正在尝试创建一个 C++ DLL 来注册终端服务以提供虚拟通道功能。CChannel.h不幸的是,找不到标题。

我正在使用面向 Windows SDK 8.0 的 Visual Studio 2012。果然,缺少所需的标头。但是,它存在于 8.1\include\um目录中

重新安装 SDK 并没有改变问题。手动引用 8.1 包含目录会导致各种问题。

有没有一种简单的方法可以在 8.0 下安装这些标头?

0 投票
0 回答
287 浏览

com-interop - 32 位动态虚拟通道

我已经为 RDP 构建了一个动态虚拟通道,它在大多数情况下都非常有效,但是在某些情况下我无法让它工作,而且我不知道为什么。

这是我尝试过的和有效的方法:

  • 在连接到 64 位服务器的 64 位客户端上的 proc 中运行 DVC 插件
  • 在 64 位 COM 服务器中运行 DVC 插件 Out of Proc,其中 64 位客户端连接到 64 位服务器

这是我尝试过但失败的方法:

  • 在连接到 64 位服务器的 32 位客户端的 proc 中运行 DVC 插件
  • 在 32 位 COM 服务器中从 proc 中运行 DVC 插件,其中 32 位客户端连接到 64 位服务器
  • 在 32 位 COM 服务器中从 proc 中运行 DVC 插件,其中 64 位客户端连接到 64 位服务器。

在所有失败的情况下,插件都由 RDP 客户端加载 OK,我得到所有标准调用(初始化、连接、断开连接、终止),我什至可以成功调用 IWTSVirtualChannelManager.CreateListener OK(意味着没有例外),但是IWTSListener 在返回时始终为空。

有谁知道为什么 IWTSVirtualChannelManager.CreateListener 不会创建新的侦听器并仍然返回 S_OK?

0 投票
1 回答
236 浏览

c# - 从 C# 导出 VirtualChannelGetInstance 函数

我想从 C# 导出这个函数:

我试过以下代码:

问题是当调用从 C# 导出的函数时,我总是得到空引用异常。可能是什么问题?

0 投票
1 回答
728 浏览

c++ - VirtualChannelInit 卡住

我正在开发一个 rdp 虚拟通道应用程序。我已经在注册表中注册了客户端 dll 并试图了解,客户端 dll 已加载。但是pVirtualChannelInitpEntryPoints. 它只是不返回任何结果,调试器转到此函数上的反汇编代码。但是如果不停止此呼叫,VirtualChannelEntry则第二次呼叫(为什么?)。

如果我使用调试器来调试 mstsc.exe。第一次通话后一段时间后,在控制台中我可以看到: First-chance exception at 0x00000004 in mstsc.exe: 0xC0000005: an access violation in the performance at 0x00000004.//用谷歌翻译在第二次通话后,屏幕上出现了 rdp 会话:

pEntryPoints 中的指针总是:

pVirtualChannelInit - 0x00000004 pVirtualChannelOpen - 0x0000ffff pVirtualChannelClose - 0x000000b8 pVirtualChannelWrite - 0x00000000 (Why 0?)

0 投票
1 回答
646 浏览

c++ - 如何将虚拟通道与位于两个不同服务器上的两个 RemoteApp 一起使用?

我制作了一个 64 位 c++虚拟通道客户端 DLL

我使用虚拟通道客户端注册更新了我的注册表(我选择了Default\Addins方式)

mstsc.exe如果我启动 Remote Dekstop连接,一切都会正常:我的 DLL 加载到VirtualChannelEntry名为拥有,在服务器会话中运行,并打开虚拟通道)。

我还能够打开到另一台服务器的第二个远程桌面连接。启动了第二个mstsc.exe进程,它加载了我的 DLL,一切正常。

当我用两个“RemoteApps”(第一个服务器上的一个 RemoteApp,第二个服务器上的另一个)替换我的两个远程桌面时,我的问题就开始了。

当我启动第一个 RemoteApp 时,一切都很好(mstsc.exe启动并加载我的 DLL)。

当我启动第二个 RemoteApp 时,没有 new mstsc.exe,因此无法再次加载我的 DLL,但现有的mstsc.exe不会调用我的 export VirtualChannelEntry。我无法与第二台服务器建立虚拟通道。

顺序很重要,而不是 RemoteApps。只有第一个启动的 RemoteApp 会为其服务器提供一个虚拟通道。

如果我只启动一个RemoteApp,然后启动与另一台服务器的完整远程桌面连接,一切正常:两个mstsc.exe加载我的 DLL,建立两个虚拟通道。

问题:

如何将虚拟通道与位于两个不同服务器上的两个 RemoteApp 一起使用?

为什么当我从两个服务器启动两个 RemoteApp 时只有一个mstsc.exe,为什么那个mstsc.exe要求第二个连接?VirtualChannelEntry

我的客户端操作系统是 Windows 2012。使用 Windows 10 Pro 作为客户端重现问题。

0 投票
1 回答
750 浏览

rdp - RDP 中的动态虚拟通道(仅内置域管理员帐户有效)

我们使用 TsTeleport API 设置了一个虚拟通道。

以下是我们场景的参数更好 -

  • 我们正在将用户身份从客户端传递到 RDP 会话
  • 我们在 RDP 服务器上有一个加载 dll 的应用程序,然后调用客户端以获取信息
  • 仅当客户端计算机以我们要 RDP 的计算机上的内置域管理员身份登录时,它才能正常工作
  • 使用什么帐户来启动远程桌面会话似乎并不重要,但如前所述,虚拟通道无法打开并且为空
  • 登录到本地计算机似乎发生了一些事情
  • 客户端管道端 dll 由内置域管理员注册

任何帮助将不胜感激。谢谢!

0 投票
1 回答
137 浏览

citrix - 无法向 Citrix 注册 DVC

我正在写一个 DVC 插件。该插件与 RDP 一起按预期工作。但是,当使用 Citrix 访问时,没有任何反应。

根据 Citrix 文档,注册按照我遵循的 DVC 的 Microsoft 文档进行(由 RDP 成功测试支持)。本来我用的是第二种方法,后来看到这个说只支持第三种,改成第三种了。这仍然适用于 RDP,但同样不适用于 Citrix。

我已经研究过弄乱 Citrix 模块注册表 - 那里有一堆 DVCAdapter 东西,看起来很可疑,就像你应该向 Citrix 额外注册 DVC,但是在我添加与现有条目相当的条目之后,什么也没发生. 文档说,如果您不按照微软所说的正常注册(我做了)但没有说明如何注册,则可以进行额外注册。

我在 Citrix 中寻找配置,因为它们似乎对所有东西都有配置;但是,当我查看政策时,似乎根本没有关于虚拟频道的内容,更不用说专门针对 DVC 了。

我安装了据称使用 DVC 通过 Citrix 进行通信的 Lync VDI 插件。但是,我无法从这个安装中辨别出对我的注册表的任何实际影响,所以那里没有灵感。

如何向 Citrix 注册我的 DVC?

0 投票
0 回答
273 浏览

winapi - 为什么使用 SM_REMOTESESSION 查询成功但 WTSIsRemoteSession 失败?

我正在使用免费的应用程序虚拟化应用程序 - Winflector。

当我GetSystemMetrics(SM_REMOTESESSION)正确使用该功能时,会检测到应用程序正在远程会话中运行,但是WTSQuerySessionInformationA()无法检测到,因此无法获取WTSClientInfo. 我想知道,这些 API 的功能有什么不同。此外,我有兴趣了解在运行此类应用程序时如何以编程方式检测客户端信息。

还想知道这些应用程序是否有可能使用 Windows 的虚拟通道(或动态虚拟通道)基础设施?