Share via


SCardGetAttrib 関数 (winscard.h)

SCardGetAttrib 関数は、指定されたハンドルの現在のリーダー属性を取得します。 リーダー、ドライバー、またはカード状態には影響しません。

構文

LONG SCardGetAttrib(
  [in]      SCARDHANDLE hCard,
  [in]      DWORD       dwAttrId,
  [out]     LPBYTE      pbAttr,
  [in, out] LPDWORD     pcbAttrLen
);

パラメーター

[in] hCard

SCardConnect から返される参照値。

[in] dwAttrId

取得する 属性 の識別子。 次の表に、 dwAttrId に使用できる値を示します。 これらの値は読み取り専用です。 ベンダーはすべての属性をサポートしていない場合があることに注意してください。

意味
SCARD_ATTR_ATR_STRING
リセット (ATR) 文字列に応答します。
SCARD_ATTR_CHANNEL_ID
0xDDDDCCCC としてエンコードされた DWORDDDDD = データ チャネルの種類と CCCC = チャネル番号:
  • DDDD には、次のエンコードが定義されています。
  • 0x01シリアル I/O; CCCC はポート番号です。
  • 並列 I/O を0x02します。 CCCC はポート番号です。
  • 0X04 PS/2 キーボード ポート; CCCC は 0 です。
  • SCSI を0x08します。 CCCC は SCSI ID 番号です。
  • 0X10 IDE; CCCC はデバイス番号です。
  • 0X20 USB; CCCC はデバイス番号です。
  • 0xFy から 15 までの範囲の y を持つ y ベンダー定義インターフェイス。 CCCC はベンダー定義です。
SCARD_ATTR_CHARACTERISTICS
サポートされている機械的特性を示す DWORD。 0 の場合、特別な特性はサポートされません。 複数のビットを設定できることに注意してください。
  • 0x00000001カード飲み込み機構
  • 0x00000002カード取り出し機構
  • 0x00000004 カード キャプチャ メカニズム
その他の値はすべて、将来使用するために予約されています (RFU)。
SCARD_ATTR_CURRENT_BWT
現在のブロック待機時間。
SCARD_ATTR_CURRENT_CLK
現在のクロック レート (kHz 単位)。
SCARD_ATTR_CURRENT_CWT
現在の文字の待機時間。
SCARD_ATTR_CURRENT_D
ビット レート変換係数。
SCARD_ATTR_CURRENT_EBC_ENCODING
現在のエラー ブロック制御エンコード。

0 = 縦冗長チェック (LRC)

1 = 循環冗長チェック (CRC)

SCARD_ATTR_CURRENT_F
クロック変換係数。
SCARD_ATTR_CURRENT_IFSC
情報フィールド サイズカードの現在のバイト サイズ。
SCARD_ATTR_CURRENT_IFSD
情報フィールド サイズ デバイスの現在のバイト サイズ。
SCARD_ATTR_CURRENT_N
現在のガード時間。
SCARD_ATTR_CURRENT_PROTOCOL_TYPE
DWORDrrrpppp 0x0としてエンコードされ、 rrr は RFU であり、0x000する必要があります。 pppp は 、現在のプロトコルの種類をエンコードします。 どのビットが設定されているかは、現在使用されている ISO プロトコルを示します。 (たとえば、ビット 0 が設定されている場合、 T=0 プロトコル が有効になります)。
SCARD_ATTR_CURRENT_W
現在の作業時間の待機時間。
SCARD_ATTR_DEFAULT_CLK
既定のクロック レート (kHz 単位)。
SCARD_ATTR_DEFAULT_DATA_RATE
既定のデータ レート (bps 単位)。
SCARD_ATTR_DEVICE_FRIENDLY_NAME
閲覧者の表示名。
SCARD_ATTR_DEVICE_IN_USE
将来利用するために予約されています。
SCARD_ATTR_DEVICE_SYSTEM_NAME
閲覧者のシステム名。
SCARD_ATTR_DEVICE_UNIT
このベンダーのリーダーのインスタンスがコンピューターに接続されています。 最初のインスタンスはデバイスユニット0、次はユニット1(リーダーの同じブランドの場合)などになります。 この値には、2 つの異なるブランドのリーダーの両方にゼロが含まれます。
SCARD_ATTR_ICC_INTERFACE_STATUS
1 バイト。 スマートカード電気的接触がアクティブでない場合は 0、接触がアクティブな場合は 0 以外。
SCARD_ATTR_ICC_PRESENCE
スマート カードプレゼンスを示す 1 バイト:

0 = 存在しない

1 = カード存在するが飲み込まれていない (リーダーがスマート カードの飲み込みに対応している場合にのみ適用されます)

2 = カード存在する (リーダーがスマート カードの飲み込みに対応している場合は飲み込まれる)

4 = 没収カード。

SCARD_ATTR_ICC_TYPE_PER_ATR
スマート カードの種類を示す 1 バイト:

0 = 不明な型

1 = 7816 非同期

2 = 7816 同期

その他の値 RFU。

SCARD_ATTR_MAX_CLK
最大クロック レート (kHz 単位)。
SCARD_ATTR_MAX_DATA_RATE
最大データ レート (bps 単位)。
SCARD_ATTR_MAX_IFSD
情報ファイル サイズ デバイスの最大バイト数。
SCARD_ATTR_POWER_MGMT_SUPPORT
スマート カードの挿入中にデバイスが電源ダウンをサポートしていない場合はゼロ。 それ以外の場合は 0 以外。
SCARD_ATTR_PROTOCOL_TYPES
rrr が RFU であり、0x000する必要があるrrrpppp 0x0としてエンコードされた DWORD。 pppp は、サポートされているプロトコルの種類をエンコードします。 特定のビット位置の '1' は、関連付けられた ISO プロトコルのサポートを示しているため、ビット 0 と 1 が設定されている場合は、 T=0T=1 の両方のプロトコルがサポートされます。
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
ベンダー提供のインターフェイス デバイスのシリアル番号。
SCARD_ATTR_VENDOR_IFD_TYPE
ベンダー提供のインターフェイス デバイスの種類 (リーダーのモデル指定)。
SCARD_ATTR_VENDOR_IFD_VERSION
ベンダー提供のインターフェイス デバイス バージョン (0xMMmmbbbb 形式の DWORD (MM = メジャー バージョン、mm = マイナー バージョン、bbbb = ビルド番号)。
SCARD_ATTR_VENDOR_NAME
ベンダー名。

[out] pbAttr

dwAttrId で ID が指定された属性を受け取るバッファーへのポインター。 この値が NULL の場合、 SCardGetAttribpcbAttrLen で指定されたバッファー長を無視し、このパラメーターが NULL でない場合に返されるバッファーの長さを pcbAttrLen に書き込み、成功コードを返します。

[in, out] pcbAttrLen

pbAttr バッファーの長さ (バイト単位)、および受信した属性の実際の長さを受け取ります。バッファーの長さがSCARD_AUTOALLOCATEとして指定されている場合、pbAttr はバイト ポインターへのポインターに変換され、属性を含むメモリ ブロックのアドレスを受け取ります。 このメモリ ブロックは 、SCardFreeMemory で割り当てを解除する必要があります。

戻り値

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

リターン コード 説明
Success
SCARD_S_SUCCESS。
属性値はサポートされていません。
ERROR_NOT_SUPPORTED。
その他のエラー
エラー コード。 詳細については、「 スマート カードの戻り値」を参照してください。

注釈

SCardGetAttrib 関数は、直接カードアクセス関数です。 その他の直接アクセス機能の詳細については、「 Direct Card Access Functions」を参照してください。

次の例は、カード リーダーの属性を取得する方法を示しています。 この例では、hCardHandle が SCardConnect 関数の以前の呼び出しから取得した有効なハンドルであることを前提としています。

LPBYTE   pbAttr = NULL;
DWORD    cByte = SCARD_AUTOALLOCATE;
DWORD    i;
LONG     lReturn;

lReturn = SCardGetAttrib(hCardHandle,
                         SCARD_ATTR_VENDOR_NAME,
                         (LPBYTE)&pbAttr,
                         &cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
    if ( ERROR_NOT_SUPPORTED == lReturn )
        printf("Value not supported\n");
    else
    {
        // Some other error occurred.
        printf("Failed SCardGetAttrib - %x\n", lReturn);
        exit(1);  // Or other appropriate action
    }
}
else
{
    // Output the bytes.
    for (i = 0; i < cByte; i++)
        printf("%c", *(pbAttr+i));
    printf("\n");

    // Free the memory when done.
    // hContext was set earlier by SCardEstablishContext
    lReturn = SCardFreeMemory( hContext, pbAttr );
}

要件

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

こちらもご覧ください

SCardConnect

SCardFreeMemory

SCardSetAttrib