共用方式為


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

讀取器中智慧卡的目前 狀態。 成功時,它會收到下列其中一個狀態指標。

價值 意義
SCARD_ABSENT
讀取器中沒有卡片。
SCARD_PRESENT
卡片中有卡片,但尚未移至位置以供使用。
SCARD_SWALLOWED
讀取器中有卡片可供使用。 卡片未提供電源。
SCARD_POWERED
電源正在提供給卡片,但讀取器驅動程式不知道卡片的模式。
SCARD_NEGOTIABLE
卡片已重設,並正在等待 PTS 交涉。
SCARD_SPECIFIC
卡片已重設,並已建立 的特定 通訊協定。

[out, optional] pdwProtocol

目前的通訊協定,如果有的話。 只有當 pdwState 傳回的值SCARD_SPECIFICMODE時,傳回的值才有意義。

價值 意義
SCARD_PROTOCOL_RAW
原始傳輸通訊協定正在使用中。
SCARD_PROTOCOL_T0
ISO 7816/3 T=0 通訊協定正在使用中。
SCARD_PROTOCOL_T1
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

另請參閱

SCardConnect

SCardDisconnect