Freigeben über


SCardStatusA-Funktion (winscard.h)

Die funktion SCardStatus stellt den aktuellen Status einer Smartcard- in einem Reader-bereit. Sie können ihn jederzeit nach einem erfolgreichen Aufruf von SCardConnect- und vor einem erfolgreichen Aufruf von SCardDisconnect-aufrufen. Es wirkt sich nicht auf den Zustand des Lese- oder Lesetreibersaus.

Syntax

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
);

Parameter

[in] hCard

Von SCardConnectzurückgegebener Verweiswert.

[out] mszReaderNames

Liste der Anzeigenamen (mehrere Zeichenfolgen), mit denen der aktuell verbundene Reader bekannt ist.

[in, out, optional] pcchReaderLen

Gibt bei eingaben die Länge des szReaderName Puffers an.

Empfängt bei der Ausgabe die tatsächliche Länge (in Zeichen) der Lesernamenliste, einschließlich des nachfolgenden NULL- Zeichens. Wenn diese Pufferlänge als SCARD_AUTOALLOCATE angegeben wird, wird szReaderName in einen Zeiger in einen Bytezeiger konvertiert und empfängt die Adresse eines Speicherblocks, der die Struktur mit mehreren Zeichenfolgen enthält.

[out, optional] pdwState

Aktueller Status der Smartcard im Lesegerät. Nach Erfolg erhält sie einen der folgenden Statusindikatoren.

Wert Bedeutung
SCARD_ABSENT
Es gibt keine Karte im Lesegerät.
SCARD_PRESENT
Es gibt eine Karte im Lesegerät, aber sie wurde nicht zur Verwendung in die Position verschoben.
SCARD_SWALLOWED
Es gibt eine Karte in der Leseposition zur Verwendung. Die Karte wird nicht unterstützt.
SCARD_POWERED
Die Stromversorgung wird auf der Karte bereitgestellt, der Lesertreiber weiß jedoch nicht über den Modus der Karte.
SCARD_NEGOTIABLE
Die Karte wurde zurückgesetzt und wartet auf die PTS-Aushandlung.
SCARD_SPECIFIC
Die Karte wurde zurückgesetzt und spezifische Kommunikationsprotokolle eingerichtet.

[out, optional] pdwProtocol

Aktuelles Protokoll, falls vorhanden. Der zurückgegebene Wert ist nur dann sinnvoll, wenn der zurückgegebene Wert pdwState SCARD_SPECIFICMODE ist.

Wert Bedeutung
SCARD_PROTOCOL_RAW
Das Raw Transfer-Protokoll wird verwendet.
SCARD_PROTOCOL_T0
Das ISO 7816/3 T=0 Protokoll wird verwendet.
SCARD_PROTOCOL_T1
Das ISO 7816/3 T=1 Protokoll wird verwendet.

[out] pbAtr

Zeigen Sie auf einen 32-Byte-Puffer, der die ATR-Zeichenfolge von der aktuell eingefügten Karte empfängt, sofern verfügbar.

[in, out, optional] pcbAtrLen

Gibt bei eingaben die Länge des pbAtr- Puffers an. Empfängt bei der Ausgabe die Anzahl der Bytes in der ATR-Zeichenfolge (maximal 32 Bytes). Wenn diese Pufferlänge als SCARD_AUTOALLOCATE angegeben wird, wird pbAtr- in einen Zeiger auf einen Bytezeiger konvertiert und empfängt die Adresse eines Speicherblocks, der die Mehrzeichenfolgenstruktur enthält.

Rückgabewert

Wenn die Funktion erfolgreich den aktuellen Status einer Smartcard- in einem Reader-bereitstellt, wird der Rückgabewert SCARD_S_SUCCESS.

Wenn die Funktion fehlschlägt, wird ein Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Smartcard-Rückgabewerte.

Bemerkungen

Die -Funktion SCardStatus ist eine Smartcard- und Lesefunktion Zugriffsfunktion. Informationen zu anderen Zugriffsfunktionen finden Sie unter Smartcard- und Lesezugriffsfunktionen.

Beispiele

Das folgende Beispiel zeigt, wie der Zustand der Smartcard bestimmt wird.

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;
}

Anmerkung

Der winscard.h-Header definiert SCardStatus als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP [nur Desktop-Apps]
mindestens unterstützte Server- Windows Server 2003 [Nur Desktop-Apps]
Zielplattform- Fenster
Header- winscard.h
Library Winscard.lib
DLL- Winscard.dll

Siehe auch

SCardConnect-

SCardDisconnect-