Freigeben über


SCardListReadersA-Funktion (winscard.h)

Die SCardListReaders--Funktion stellt die Liste der Leser innerhalb einer Gruppe benannter Lesergruppenbereit, wodurch Duplikate eliminiert werden.

Der Anrufer liefert eine Liste der Lesergruppen und empfängt die Liste der Leser innerhalb der benannten Gruppen. Nicht erkannte Gruppennamen werden ignoriert. Diese Funktion gibt nur Leser innerhalb der benannten Gruppen zurück, die derzeit an das System angefügt sind und zur Verwendung verfügbar sind.

Syntax

LONG SCardListReadersA(
  [in]           SCARDCONTEXT hContext,
  [in, optional] LPCSTR       mszGroups,
  [out]          LPSTR        mszReaders,
  [in, out]      LPDWORD      pcchReaders
);

Parameter

[in] hContext

Behandeln Sie die Ressourcen-Manager-Kontext für die Abfrage. Der Ressourcen-Manager-Kontext kann durch einen vorherigen Aufruf von SCardEstablishContextfestgelegt werden.

Wenn dieser Parameter auf NULL-festgelegt ist, ist die Suche nach Lesern nicht auf einen Kontext beschränkt.

[in, optional] mszGroups

Namen der Lesergruppen, die für das System definiert sind, als Multizeichenfolge. Verwenden Sie einen NULL- Wert, um alle Leser im System auflisten (d. a. die Gruppe "SCard$AllReaders").

Wert Bedeutung
SCARD_ALL_READERS
TEXT("SCard$AllReaders\000")
Die Gruppe wird verwendet, wenn beim Auflisten von Lesern kein Gruppenname angegeben wird. Gibt eine Liste aller Leser zurück, unabhängig davon, in welcher Gruppe oder Gruppe sich die Leser befinden.
SCARD_DEFAULT_READERS
TEXT("SCard$DefaultReaders\000")
Standardgruppe, der alle Leser hinzugefügt werden, wenn sie in das System eingeführt werden.
SCARD_LOCAL_READERS
TEXT("SCard$LocalReaders\000")
Nicht verwendeter Legacywert. Dies ist eine intern verwaltete Gruppe, die nicht mithilfe von Lesegruppen-APIs geändert werden kann. Es ist nur für Enumerationen vorgesehen.
SCARD_SYSTEM_READERS
TEXT("SCard$SystemReaders\000")
Nicht verwendeter Legacywert. Dies ist eine intern verwaltete Gruppe, die nicht mithilfe von Lesegruppen-APIs geändert werden kann. Es ist nur für Enumerationen vorgesehen.

[out] mszReaders

Mehrere Zeichenfolgen, die die Kartenleser innerhalb der bereitgestellten Lesergruppen auflisten. Wenn dieser Wert NULL-ist, ignoriert SCardListReaders die in pcchReadersbereitgestellte Pufferlänge ignoriert, schreibt die Länge des Puffers, der zurückgegeben wurde, wenn dieser Parameter nicht NULL-pcchReaderswurde und einen Erfolgscode zurückgibt.

[in, out] pcchReaders

Länge des mszReaders Puffer in Zeichen. Dieser Parameter empfängt die tatsächliche Länge der Mehrzeichenfolgenstruktur, einschließlich aller nachfolgenden NULL- Zeichen. Wenn die Pufferlänge als SCARD_AUTOALLOCATE angegeben wird, wird mszReaders in einen Zeiger in einen Bytezeiger konvertiert und empfängt die Adresse eines Speicherblocks, der die Mehrzeichenfolgenstruktur enthält. Dieser Speicherblock muss mit SCardFreeMemory-behandelt werden.

Rückgabewert

Diese Funktion gibt unterschiedliche Werte zurück, je nachdem, ob sie erfolgreich ist oder fehlschlägt.

Zurückgeben von Code/Wert Beschreibung
Erfolg
0 (0x0)
SCARD_S_SUCCESS
Gruppe enthält keine Leser
2148532270 (0x8010002E)
SCARD_E_NO_READERS_AVAILABLE
Angegebenen Reader ist zurzeit nicht für die Verwendung verfügbar.
2148532247 (0x80100017)
SCARD_E_READER_UNAVAILABLE
Andere
Fehlercode. Weitere Informationen finden Sie unter Smartcard-Rückgabewerte.

Bemerkungen

Die SCardListReaders Funktion ist eine Datenbankabfragefunktion. Weitere Informationen zu anderen Datenbankabfragefunktionen finden Sie unter SmartCard-Datenbankabfragefunktionen.

Beispiele

Das folgende Beispiel zeigt, wie die Leser aufgelistet werden.

LPTSTR          pmszReaders = NULL;
LPTSTR          pReader;
LONG            lReturn, lReturn2;
DWORD           cch = SCARD_AUTOALLOCATE;

// Retrieve the list the readers.
// hSC was set by a previous call to SCardEstablishContext.
lReturn = SCardListReaders(hSC,
                           NULL,
                           (LPTSTR)&pmszReaders,
                           &cch );
switch( lReturn )
{
    case SCARD_E_NO_READERS_AVAILABLE:
        printf("Reader is not in groups.\n");
        // Take appropriate action.
        // ...
        break;

    case SCARD_S_SUCCESS:
        // Do something with the multi string of readers.
        // Output the values.
        // A double-null terminates the list of values.
        pReader = pmszReaders;
        while ( '\0' != *pReader )
        {
            // Display the value.
            printf("Reader: %S\n", pReader );
            // Advance to the next value.
            pReader = pReader + wcslen((wchar_t *)pReader) + 1;
        }
        // Free the memory.
        lReturn2 = SCardFreeMemory( hSC,
                                   pmszReaders );
        if ( SCARD_S_SUCCESS != lReturn2 )
            printf("Failed SCardFreeMemory\n");
        break;

default:
        printf("Failed SCardListReaders\n");
        // Take appropriate action.
        // ...
        break;
}

Anmerkung

Der winscard.h-Header definiert SCardListReaders 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

SCardEstablishContext-

SCardFreeMemory-

SCardGetProviderId-

SCardListCards-

SCardListInterfaces

SCardListReaderGroups