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 に使用できる値を示します。 これらの値は読み取り専用です。 ベンダーはすべての属性をサポートしていない場合があることに注意してください。
値 | 意味 |
---|---|
|
リセット (ATR) 文字列に応答します。 |
|
0xDDDDCCCC としてエンコードされた DWORD。DDDD = データ チャネルの種類と CCCC = チャネル番号:
|
|
サポートされている機械的特性を示す DWORD。 0 の場合、特別な特性はサポートされません。 複数のビットを設定できることに注意してください。
|
|
現在のブロック待機時間。 |
|
現在のクロック レート (kHz 単位)。 |
|
現在の文字の待機時間。 |
|
ビット レート変換係数。 |
|
現在のエラー ブロック制御エンコード。
0 = 縦冗長チェック (LRC) 1 = 循環冗長チェック (CRC) |
|
クロック変換係数。 |
|
情報フィールド サイズカードの現在のバイト サイズ。 |
|
情報フィールド サイズ デバイスの現在のバイト サイズ。 |
|
現在のガード時間。 |
|
DWORD はrrrpppp 0x0としてエンコードされ、 rrr は RFU であり、0x000する必要があります。 pppp は 、現在のプロトコルの種類をエンコードします。 どのビットが設定されているかは、現在使用されている ISO プロトコルを示します。 (たとえば、ビット 0 が設定されている場合、 T=0 プロトコル が有効になります)。 |
|
現在の作業時間の待機時間。 |
|
既定のクロック レート (kHz 単位)。 |
|
既定のデータ レート (bps 単位)。 |
|
閲覧者の表示名。 |
|
将来利用するために予約されています。 |
|
閲覧者のシステム名。 |
|
このベンダーのリーダーのインスタンスがコンピューターに接続されています。 最初のインスタンスはデバイスユニット0、次はユニット1(リーダーの同じブランドの場合)などになります。 この値には、2 つの異なるブランドのリーダーの両方にゼロが含まれます。 |
|
1 バイト。 スマートカード電気的接触がアクティブでない場合は 0、接触がアクティブな場合は 0 以外。 |
|
スマート カードプレゼンスを示す 1 バイト: 0 = 存在しない 1 = カード存在するが飲み込まれていない (リーダーがスマート カードの飲み込みに対応している場合にのみ適用されます) 2 = カード存在する (リーダーがスマート カードの飲み込みに対応している場合は飲み込まれる) 4 = 没収カード。 |
|
スマート カードの種類を示す 1 バイト: 0 = 不明な型 1 = 7816 非同期 2 = 7816 同期 その他の値 RFU。 |
|
最大クロック レート (kHz 単位)。 |
|
最大データ レート (bps 単位)。 |
|
情報ファイル サイズ デバイスの最大バイト数。 |
|
スマート カードの挿入中にデバイスが電源ダウンをサポートしていない場合はゼロ。 それ以外の場合は 0 以外。 |
|
rrr が RFU であり、0x000する必要があるrrrpppp 0x0としてエンコードされた DWORD。 pppp は、サポートされているプロトコルの種類をエンコードします。 特定のビット位置の '1' は、関連付けられた ISO プロトコルのサポートを示しているため、ビット 0 と 1 が設定されている場合は、 T=0 と T=1 の両方のプロトコルがサポートされます。 |
|
ベンダー提供のインターフェイス デバイスのシリアル番号。 |
|
ベンダー提供のインターフェイス デバイスの種類 (リーダーのモデル指定)。 |
|
ベンダー提供のインターフェイス デバイス バージョン (0xMMmmbbbb 形式の DWORD (MM = メジャー バージョン、mm = マイナー バージョン、bbbb = ビルド番号)。 |
|
ベンダー名。 |
[out] pbAttr
dwAttrId で ID が指定された属性を受け取るバッファーへのポインター。 この値が NULL の場合、 SCardGetAttrib は pcbAttrLen で指定されたバッファー長を無視し、このパラメーターが NULL でない場合に返されるバッファーの長さを pcbAttrLen に書き込み、成功コードを返します。
[in, out] pcbAttrLen
pbAttr バッファーの長さ (バイト単位)、および受信した属性の実際の長さを受け取ります。バッファーの長さがSCARD_AUTOALLOCATEとして指定されている場合、pbAttr はバイト ポインターへのポインターに変換され、属性を含むメモリ ブロックのアドレスを受け取ります。 このメモリ ブロックは 、SCardFreeMemory で割り当てを解除する必要があります。
戻り値
この関数は、成功するか失敗したかに応じて異なる値を返します。
リターン コード | 説明 |
---|---|
|
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 |