SCardStatusA 函式 (winscard.h)
SCardStatus 函式提供 讀取器中 智慧卡 的目前狀態。 您可以在成功呼叫 SCardConnect ,並在成功 呼叫 SCardDisconnect之前呼叫它。 它不會影響讀取器或讀取器驅動程式
語法
LONG SCardStatusA(
[in] SCARDHANDLE hCard,
[out] LPSTR mszReaderNames,
[in, out, optional] LPDWORD pcchReaderLen,
[out, optional] LPDWORD pdwState,
[out, optional] LPDWORD pdwProtocol,
[out] LPBYTE pbAtr,
[in, out, optional] LPDWORD pcbAtrLen
);
參數
[in] hCard
從 SCardConnect傳回的參考值。
[out] mszReaderNames
目前已連接讀取器的顯示名稱清單(多個字串)。
[in, out, optional] pcchReaderLen
在輸入時,提供 szReaderName 緩衝區的長度。
在輸出中,接收讀取器名稱清單的實際長度(以字元為單位),包括尾端 NULL 字元。 如果這個緩衝區長度指定為SCARD_AUTOALLOCATE,則 szReaderName 會轉換成位元組指標的指標,並接收包含多字元串結構的記憶體區塊位址。
[out, optional] pdwState
讀取器中智慧卡的目前 狀態。 成功時,它會收到下列其中一個狀態指標。
[out, optional] pdwProtocol
目前的通訊協定,如果有的話。 只有當 pdwState 傳回的值SCARD_SPECIFICMODE時,傳回的值才有意義。
價值 | 意義 |
---|---|
|
原始傳輸通訊協定正在使用中。 |
|
ISO 7816/3 T=0 通訊協定正在使用中。 |
|
ISO 7816/3 T=1 通訊協定正在使用中。 |
[out] pbAtr
32 位元組緩衝區的指標,如果可用,則會從目前插入的卡片接收 ATR 字串。
[in, out, optional] pcbAtrLen
在輸入時,提供 pbAtr 緩衝區的長度。 在輸出中,接收 ATR 字串中的位元組數目(最大值為 32 個字節)。 如果這個緩衝區長度指定為SCARD_AUTOALLOCATE,則 pbAtr 會轉換成位元組指標的指標,並接收包含多字串結構的記憶體區塊位址。
傳回值
如果函式在 讀取器中成功提供 智慧卡 的目前狀態,則會傳回值SCARD_S_SUCCESS。
如果函式失敗,則會傳回錯誤碼。 如需詳細資訊,請參閱
言論
SCardStatus 函式是 智慧卡 和 讀取器 存取函式。 如需其他存取函式的相關信息,請參閱 智慧卡和讀取器存取函式。
例子
下列範例示範如何判斷智慧卡的狀態。
WCHAR szReader[200];
DWORD cch = 200;
BYTE bAttr[32];
DWORD cByte = 32;
DWORD dwState, dwProtocol;
LONG lReturn;
// Determine the status.
// hCardHandle was set by an earlier call to SCardConnect.
lReturn = SCardStatus(hCardHandle,
szReader,
&cch,
&dwState,
&dwProtocol,
(LPBYTE)&bAttr,
&cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
printf("Failed SCardStatus\n");
exit(1); // or other appropriate action
}
// Examine retrieved status elements.
// Look at the reader name and card state.
printf("%S\n", szReader );
switch ( dwState )
{
case SCARD_ABSENT:
printf("Card absent.\n");
break;
case SCARD_PRESENT:
printf("Card present.\n");
break;
case SCARD_SWALLOWED:
printf("Card swallowed.\n");
break;
case SCARD_POWERED:
printf("Card has power.\n");
break;
case SCARD_NEGOTIABLE:
printf("Card reset and waiting PTS negotiation.\n");
break;
case SCARD_SPECIFIC:
printf("Card has specific communication protocols set.\n");
break;
default:
printf("Unknown or unexpected card state.\n");
break;
}
注意
winscard.h 標頭會根據 UNICODE 預處理器常數的定義,將 SCardStatus 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
支援的最低伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | winscard.h |
連結庫 | Winscard.lib |
DLL | Winscard.dll |