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) 字串。 |
|
DWORD 編碼為 0xDDDDCCCC,其中 DDDD = 數據通道類型, 而 CCCC = 通道號碼:
|
|
DWORD ,指出支援哪些機械特性。 如果為零,則不支援任何特殊特性。 請注意,可以設定多個位:
|
|
目前的區塊等候時間。 |
|
目前的時鐘速率,以 kHz 為單位。 |
|
目前字元等候時間。 |
|
比特率轉換因數。 |
|
目前的錯誤區塊控件編碼。
0 = LRC (長方備援檢查) 1 = 循環備援檢查 (CRC) |
|
時鐘轉換因數。 |
|
資訊欄位大小卡片目前的位元元組大小。 |
|
資訊欄位大小裝置的目前位元組大小。 |
|
目前的防護時間。 |
|
DWORD 編碼為 0x0rrrpppp ,其中 rrr 是 RFU,而且應該0x000。 pppp 會編碼目前的通訊協議類型。 已設定哪一個位表示目前使用哪個 ISO 通訊協定。 (例如,如果設定了位零, T=0 通訊協定 就會生效。) |
|
目前的工作等候時間。 |
|
默認時鐘速率,以 kHz 為單位。 |
|
默認數據速率,以 bps 為單位。 |
|
讀者的顯示名稱。 |
|
保留供未來使用。 |
|
讀取者的系統名稱。 |
|
此廠商的讀取器實例附加至計算機。 第一個實例會是裝置單位 0,如果它與讀取器) 的相同品牌,則下一個實例會是單元 1 (。 兩個不同的讀者品牌對於此值而言都會有零。 |
|
單一位元組。 如果 智慧卡 電接點未使用,則為零;如果聯繫人為使用中,則為非零。 |
|
指出智慧卡存在狀態的單一位元組: 0 = 不存在 1 = 卡片存在,但不適用於 (只有在讀取器支持智慧卡) 2 = 卡片存在 (,如果讀取器支援智慧卡) 4 = 卡片已壓縮。 |
|
指出智慧卡類型的單一位元組: 0 = 未知的類型 1 = 7816 異步 2 = 7816 同步 其他值 RFU。 |
|
最大時鐘速率,以 kHz 為單位。 |
|
數據速率上限,以 bps 為單位。 |
|
資訊檔案大小裝置的最大位元元組數。 |
|
如果插入智慧卡時裝置不支援關閉電源,則為零。 否則為非零。 |
|
DWORD 編碼為 0x0rrrpppp ,其中 rrr 是 RFU,且應該0x000。 pppp 會編碼支持的通訊協議類型。 指定位位置中的 『1』 表示支援相關聯的 ISO 通訊協定,因此如果設定零位和一個, 則支援 T=0 和 T=1 通訊協定。 |
|
廠商提供的介面裝置序號。 |
|
廠商提供的介面裝置類型 (讀取器) 的模型指定。 |
|
廠商提供的介面裝置版本 (DWORD 格式為 0xMMmmbbbb ,其中 MM = 主要版本、 mm = 次要版本, 而 bbbb = 組建編號) 。 |
|
廠商名稱。 |
[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 |