1

セキュリティ対策として、Windows はローカル スマートカード リーダーをリモート マシンに転送します。問題はそれです

  1. すでにハンドルを持っているリーダーは使用できなくなります
  2. 新しい読者を獲得できない

端末または 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 );
}
}

マシン A でコードを起動し、マシン B を使用して RDP を起動し、Enter キーを押します。マシン A で RDP を入力し、すぐに切断して Enter キーを押すこともできます。

C では、SCardReleaseContext と SCardEstablishContext ( ref ) を使用します。Java API を介してこれを行う方法はありますか?

ファローアップ

AFAICTこれは不可能です。ただし、リンクリンクを参照してください。サーバーでスマートカードのリダイレクトを無効にして、問題を回避できるはずです。

Win7 Pro では、gpedit.msc に「コンピューターの構成/管理用テンプレート/Windows コンポーネント/リモート デスクトップ サービス/リモート デスクトップ セッション ホスト/デバイスとリソースのリダイレクト/スマート カード デバイスのリダイレクトを許可しない」という設定が見つかりました。つまり、私はこれをまだ機能させていません。接続前に RDP クライアントの「スマートカードを転送する」チェックボックスをオフにしても効果はありません。

4

1 に答える 1

0

これは、リーダーを使用しているユーザーと同じユーザーとして RDP を使用する場合にのみ問題になります。ObjectWeb の JavaService.exe を使用してサーバーを実行し、「Local System」ユーザーとして実行することで、この問題を回避しました。

于 2012-07-09T09:09:04.920 に答える