为什么 WTSVirtualChannelOpenEx return 31 "A device attached to the system is not functioning."

Why does WTSVirtualChannelOpenEx return 31 "A device attached to the system is not functioning."

我已经实现了远程桌面动态虚拟通道服务器和客户端,当我调用 WTSVirtualChannelOpenEx 时,它 returns false 和 GetLastError returns:

31
A device attached to the system is not functioning.

我在 OnNewChannelConnection 中设置 pAcceptpCallback 并返回 S_OK。我没有看到任何例外。使用 ECHO DVC 的测试在同一个客户端上打开得很好。

internal class DemoWtsListenerCallback : IWTSListenerCallback
{
    public void OnNewChannelConnection(IWTSVirtualChannel pChannel, 
        [MarshalAs(UnmanagedType.BStr)] string data, 
        out bool pAccept, out IWTSVirtualChannelCallback pCallback)
    {
        pAccept = true;
        pCallback = new DemoWtsChannelCallback(pChannel);
    }
}

为什么我的服务器出错?

mstsc 期望 pAccept 设置为 1 表示 true - 0xffffffff 的默认编组(根据 BOOL 类型应该没问题)不被解释是真的。

使用 [MarshalAs(UnmanagedType.Bool)] 到 return 1 为真。

internal class DemoWtsListenerCallback : IWTSListenerCallback
{
    public void OnNewChannelConnection(
        IWTSVirtualChannel pChannel, 
        [MarshalAs(UnmanagedType.BStr)] string data, 
        [MarshalAs(UnmanagedType.Bool)] out bool pAccept, 
        out IWTSVirtualChannelCallback pCallback)
    {
        pAccept = true;
        pCallback = new DemoWtsChannelCallback(pChannel);
    }
}