SCardConnectA 関数 (winscard.h)

SCardConnect 関数は、呼び出し元のアプリケーションと、特定のリーダーに含まれるスマート カードとの間に (特定のリソース マネージャー コンテキストを使用して) 接続を確立します。 指定したリーダーにカードが存在しない場合は、エラーが返されます。

構文

LONG SCardConnectA(
  [in]  SCARDCONTEXT  hContext,
  [in]  LPCSTR        szReader,
  [in]  DWORD         dwShareMode,
  [in]  DWORD         dwPreferredProtocols,
  [out] LPSCARDHANDLE phCard,
  [out] LPDWORD       pdwActiveProtocol
);

パラメーター

[in] hContext

リソース マネージャー コンテキストを識別するハンドル。 リソース マネージャー コンテキストは、 SCardEstablishContext の以前の呼び出しによって設定されます。

[in] szReader

ターゲット カードを含むリーダーの名前。

[in] dwShareMode

他のアプリケーションがカードへの接続を形成できるかどうかを示すフラグ。

意味
SCARD_SHARE_SHARED
このアプリケーションでは、カードを他のアプリケーションと共有します。
SCARD_SHARE_EXCLUSIVE
このアプリケーションは、他のアプリケーションとカードを共有する必要はありません。
SCARD_SHARE_DIRECT
このアプリケーションは、そのプライベート使用のためにリーダーを割り当て、それを直接制御します。 他のアプリケーションにはアクセスできません。

[in] dwPreferredProtocols

接続に使用できるプロトコルのビットマスク。 使用できる値は 、OR 演算と組み合わせて使用できます。

意味
SCARD_PROTOCOL_T0
T=0 は許容されるプロトコルです。
SCARD_PROTOCOL_T1
T=1 は許容されるプロトコルです。
0
dwShareMode が SCARD_SHARE_DIRECT に設定されている場合にのみ、このパラメーターは 0 になります。 この場合、IOCTL_SMARTCARD_SET_PROTOCOL コントロール ディレクティブが SCardControl と共に送信されるまで、ドライバーによってプロトコル ネゴシエーションは実行されません。

[out] phCard

指定されたリーダー内のスマート カードへの接続を識別するハンドル。

[out] pdwActiveProtocol

確立されたアクティブなプロトコルを示すフラグ。

意味
SCARD_PROTOCOL_T0
T=0 はアクティブなプロトコルです。
SCARD_PROTOCOL_T1
T=1 はアクティブなプロトコルです。
SCARD_PROTOCOL_UNDEFINED
プロトコル ネゴシエーションが発生しないように、SCARD_SHARE_DIRECTが指定されています。 リーダーにカードがない可能性があります。

戻り値

この関数は、成功するか失敗するかによって異なる値を返します。

リターン コード 説明
Success
SCARD_S_SUCCESS。
障害
エラー コード。 詳細については、「 スマート カードの戻り値」を参照してください。
SCARD_E_NOT_READY
リーダーがカードに接続できませんでした。

注釈

SCardConnect 関数は、スマート カードおよびリーダー アクセス関数です。 その他のアクセス機能の詳細については、「 スマート カードおよびリーダー アクセス関数」を参照してください。

次の例では、リーダーへの接続を作成します。 この例では、hContextSCardEstablishContext の以前の呼び出しから受信した SCARDCONTEXT 型の有効なハンドルであると想定しています。

SCARDHANDLE     hCardHandle;
LONG            lReturn;
DWORD           dwAP;

lReturn = SCardConnect( hContext, 
                        (LPCTSTR)"Rainbow Technologies SCR3531 0",
                        SCARD_SHARE_SHARED,
                        SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
                        &hCardHandle,
                        &dwAP );
if ( SCARD_S_SUCCESS != lReturn )
{
    printf("Failed SCardConnect\n");
    exit(1);  // Or other appropriate action.
}

// Use the connection.
// Display the active protocol.
switch ( dwAP )
{
    case SCARD_PROTOCOL_T0:
        printf("Active protocol T0\n"); 
        break;

    case SCARD_PROTOCOL_T1:
        printf("Active protocol T1\n"); 
        break;

    case SCARD_PROTOCOL_UNDEFINED:
    default:
        printf("Active protocol unnegotiated or unknown\n"); 
        break;
}

// Remember to disconnect (by calling SCardDisconnect).
// ...

注意

winscard.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして SCardConnect を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー winscard.h
Library Winscard.lib
[DLL] Winscard.dll

こちらもご覧ください

SCardControl

SCardDisconnect

SCardEstablishContext

SCardReconnect