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 識別符。
  • 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 通訊協定,因此如果設定零位和一個, 則支援 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

緩衝區的指標,這個緩衝區會接收其標識碼在 dwAttrId 中提供的屬性。 如果此值為 NULL,SCardGetAttrib 會忽略在 azureAttrLen 中提供的緩衝區長度、將此參數不是 NULL 傳回的緩衝區長度寫入至 azureAttrLen,並傳回成功的程序代碼。

[in, out] pcbAttrLen

pbAttr 緩衝區的長度以位元組為單位,並接收所接收屬性的實際長度 如果緩衝區長度指定為 SCARD_AUTOALLOCATE,則 pbAttr 會轉換成位元組指標的指標,並接收包含屬性的記憶體區塊位址。 此記憶體區塊必須與 SCardFreeMemory 解除分配。

傳回值

此函式會根據它是否成功或失敗,傳回不同的值。

傳回碼 Description
「成功」
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
程式庫 Winscard.lib
Dll Winscard.dll

另請參閱

SCardConnect

SCardFreeMemory

SCardSetAttrib