Hyper-V:通过命名管道连接VM会丢失数据

Mar*_*wis 7 hyper-v serial-port named-pipes

我们正在尝试通过串行端口连接两个Hyper-V VM.Hyper-V将串行端口公开为主机系统的命名管道,并实现命名管道的服务器端.因此,要连接它们,我们需要编写一个连接到两个VM的命名管道客户端,并来回复制数据.

我们写了这样一个应用程序.不幸的是,这个应用程序丢失数据.

如果我们连接两个超文本并让它们交换数据,则传输有时会成功,但在许多情况下,接收端报告错误,或者传输只是死锁.同样,如果我们使用链接来运行内核调试器,它似乎也经常挂起.

可能是数据丢失的原因是什么?以这种方式连接命名管道时必须采取哪些预防措施?

编辑:我们使用kdsrv.exe解决了这个问题.调试对象的COM端口继续通过命名管道公开,但是,调试器端通过TCP与kdserv进行通信.

Joh*_*ohn 2

数据丢失不是由于命名管道造成的。事实上,COM 端口(模拟的和物理的)可能会丢失数据,因为它们使用 UART 中的小缓冲区进行操作。

命名管道接收写入 COM 端口的所有数据。您的程序从命名管道读取数据并将其写入另一个命名管道。如果写入速度太快,接收 COM 端口的 UART 可能会溢出,从而导致数据丢失,这就是数据丢失的根源。

您可能需要添加一些延迟以避免超过接收方期望的波特率。

此外,ResetEvent()您的程序中还漏接了呼叫。

对于您的 KD 问题,您可能需要添加resets=0到连接字符串。