Java RDP永久性杀死终端工厂

Java RDP永久性杀死终端工厂,java,smartcard,Java,Smartcard,作为安全措施,Windows将本地智能卡读卡器转发到远程计算机。问题是 您已经拥有的读卡器句柄将无法使用 不可能找到新的读者 如果您尝试使用终端或CardTerminals对象,您会得到一个PCSCException:SCARD_E_SERVICE_STOPPED 我有代码来演示这个问题: import javax.smartcardio.*; public class ScRdp { public static void main( final String[] args ) throws

作为安全措施,Windows将本地智能卡读卡器转发到远程计算机。问题是

您已经拥有的读卡器句柄将无法使用 不可能找到新的读者 如果您尝试使用终端或CardTerminals对象,您会得到一个PCSCException:SCARD_E_SERVICE_STOPPED

我有代码来演示这个问题:

import javax.smartcardio.*;

public class ScRdp {
public static void main( final String[] args ) throws Exception
{
    TerminalFactory factory = TerminalFactory.getDefault();
    System.out.println( "Factory: " + factory.hashCode() );
    final CardTerminals terminals = factory.terminals();
    List<CardTerminal> termNames = terminals.list();

    BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
    in.readLine();
    main( args );
}
}
使用机器B在机器A、RDP中启动代码,然后按enter键。您甚至可以在RDP中,立即断开连接并在机器A上按enter键

在C语言中,我会使用SCardReleaseContext和ScardestStablishContext。有没有办法通过JavaAPI做到这一点

后续行动

恐怕这是不可能的。然而,请参见。应该可以在服务器上禁用智能卡重定向,从而避免该问题


在Win7 Pro上,我在gpedit.msc中找到了设置:计算机配置/管理模板/Windows组件/远程桌面服务/远程桌面会话主机/设备和资源重定向/不允许智能卡设备重定向。也就是说,我还没有这个工作。即使在连接之前取消选中RDP客户端中的“转发智能卡”复选框也无济于事。

只有当您以使用读卡器的用户的身份登录RDP时,这才是一个问题。我们通过使用ObjectWeb中的JavaService.exe运行服务器,以本地系统用户的身份运行,从而绕过了这个问题。

也许可以将此解决方法作为答案发布,这样您就可以接受它了。如果你希望有更好的答案,你总是可以改变接受,不是吗?