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
DWORD 编码为 0xDDDDCCCC,其中 DDDD = 数据通道类型, CCCC = 通道编号:
  • DDDD 定义了以下编码:
  • 0x01串行 I/O; CCCC 是端口号。
  • 0x02并行 I/O; CCCC 是端口号。
  • 0x04 PS/2 键盘端口; CCCC 为零。
  • 0x08 SCSI; CCCC 是 SCSI ID 号。
  • 0x10 IDE; CCCC 是设备编号。
  • 0x20 USB; CCCC 是设备编号。
  • 0xFy 供应商定义的接口, y 在零到 15 的范围内; CCCC 是供应商定义的。
SCARD_ATTR_CHARACTERISTICS
指示支持哪些机械特征的 DWORD。 如果为零,则不支持任何特殊特征。 请注意,可以设置多个位:
  • 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
DWORD 编码为 0x0rrrpppp, 其中 rrr 为 RFU,应0x000。 pppp 对当前协议类型进行编码。 已设置的位表示当前正在使用哪个 ISO 协议。 (例如,如果设置了零位, 则 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 (如果它是同一品牌的读取器) ,则依此类举。 两个不同品牌的读取器都将具有此值的零。
SCARD_ATTR_ICC_INTERFACE_STATUS
单字节。 如果智能卡电接触未处于活动状态,则为零;如果接触处于活动状态,则为零。
SCARD_ATTR_ICC_PRESENCE
指示智能卡状态的单字节:

0 = 不存在

1 = 卡存在但未吞咽 (仅当阅读器支持智能卡吞咽)

2 = 如果阅读器支持智能卡吞咽) ,则卡存在 (和吞咽

4 = 卡没收。

SCARD_ATTR_ICC_TYPE_PER_ATR
指示智能卡类型的单字节:

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
如果插入智能卡时设备不支持关机,则为零。 否则为非零。
SCARD_ATTR_PROTOCOL_TYPES
DWORD 编码为 0x0rrrpppp ,其中 rrr 为 RFU,应0x000。 pppp 对支持的协议类型进行编码。 给定位位置中的“1”表示支持关联的 ISO 协议,因此,如果设置了位 0 和 1,则支持 T=0T=1 协议。
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
供应商提供的接口设备序列号。
SCARD_ATTR_VENDOR_IFD_TYPE
供应商提供的接口设备类型 (读取器) 的型号指定。
SCARD_ATTR_VENDOR_IFD_VERSION
供应商提供的接口设备版本 (DWORD 格式为 0xMMmmbbbb ,其中 MM = 主要版本, mm = 次要版本, bbbb = 内部版本号) 。
SCARD_ATTR_VENDOR_NAME
供应商名称。

[out] pbAttr

指向缓冲区的指针,该缓冲区接收其 ID 在 dwAttrId 中提供的属性。 如果此值为 NULL则 SCardGetAttrib 将忽略 在 httpAttrLen 中提供的缓冲区长度,在此参数未为 NULL 的情况下写入 返回的缓冲区长度,并返回成功代码。

[in, out] pcbAttrLen

pbAttr 缓冲区的长度(以字节为单位),接收接收的属性的实际长度 如果缓冲区长度指定为SCARD_AUTOALLOCATE,则 pbAttr 将转换为指向字节指针的指针,并接收包含该属性的内存块的地址。 此内存块必须使用 SCardFreeMemory 解除分配。

返回值

此函数根据是成功还是失败返回不同的值。

返回代码 说明
Success
SCARD_S_SUCCESS。
不支持属性值。
ERROR_NOT_SUPPORTED。
其他故障
错误代码。 有关详细信息,请参阅 智能卡返回值

注解

SCardGetAttrib 函数是直接卡访问函数。 有关其他直接访问函数的详细信息,请参阅 直接卡访问函数

示例

以下示例演示如何检索卡读取器的属性。 该示例假定 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