Projektbeispiel 3, CardManager PRO - V2.x
Das nachfolgende Projektbeispiel zeigt ein Standardverfahren, mit dem sich eine PIN Authentifizierung an der Chipkarte durchführen läßt. EEPROM Speicherkarten wie die SLE 4428, 5528, 4442 + 5542 verfügen über einen Schreibschutz, welcher erst nach erfolgreicher Authentifizierung deaktiviert wird (Read Only).
 
Private Sub Template()

    '- PC/SC Dienst: SCardSvr prüfen -

    If SCARD1.Services("SCardSvr", TASK_SERVICE, False) <> 1 then
        Debug.Print "Der Dienst 'SCardSvr' wird nicht ausgeführt !"
        Exit Sub
    End If

    '- Evtl. Kollisionsdienste suchen + beenden -

    SCARD1.Services "SCM_Smart_Card_Office_Kernel", TASK_SERVICE, True
    SCARD1.Services "SCMgr.exe", TASK_APPLICATION, True
    SCARD1.
Services "sokscmpn.exe", TASK_APPLICATION, True

    '- Schnittstelle initialisieren -

    With SCARD1
        If .
GetReaderCount >0 then
            .
CardReader = .GetReaderList
            .
DisconnectFlag = SCARD_UNPOWER_CARD
            .
AutoDetect False
            .
Initialize
        Else
            Debug.Print "Es konnte kein Terminal ermittelt werden !"
        End If
    End With

End Sub

Private Sub SCARD1_OnMCARDInit()

    With SCARD1
        Debug.Print "SDK Version = " & .
Version
        Debug.Print "MCARD-Version = " & .
CardDLL
        Debug.Print "ChannelID :" & .
ChannelID
        Debug.Print "IFDSerialID :" & .
IFDSerialID
        Debug.Print "IFDVersion :" & .
IFDVersion
    End With

    '- AutoDetect aktivieren -

    SCARD1.AutoDetect True, 50

End Sub

Private Sub
SCARD1_OnMCARDError()

    Debug.Print "MCARD-API Initialisierung/Fehler: " & SCARD1.CardERR

End Sub

Private Sub SCARD1_OnInsert()

    With SCARD1
        .
ShowTrayIcon True
        .
Connect
    End With

End Sub

Private Sub SCARD1_OnConnect()

    With SCARD1.INFO
        Debug.Print "BitOrder :" & .
BitOrder
        Debug.Print "CardCompany :" & .
CardCompany
        Debug.Print "ChipCompany :" & .
ChipCompany
        Debug.Print "ChipAttrID :" & .
ChipAttrID
        Debug.Print "ChipType :" & .
ChipType
        Debug.Print "Clockrate :" & .
Clockrate
        Debug.Print "Counter :" & .
Counter
        Debug.Print "CR's :" & .
CR
        Debug.Print "MemoryZone :" & .
CardZone
        Debug.Print "MemorySize :" & .
CardSize
        Debug.Print "PIN :" & .
PIN
        Debug.Print "Protocol :" & .
Protocol
        Debug.Print "SerialNr. :" & .
SerialNr
    End With

    '- Chipkarte mit PIN ? -

    With SCARD1
        If .
INFO.PIN >0 then                           '<- PIN-Zone vorhanden !

            '- Fehlbedienungszähler prüfen -

            If .PINRetries =0 then
                Debug.Print "Die Chipkarte ist irreversibel gesperrt !"
                Exit Sub
            End If

            '- PIN:0 Authentifizierung -

            .CardPIN = String$(.PINSize * 2, "F")     '<- Standard PIN setzen

            If Not .VerifyPIN(&H0, .CardPIN) then
                Debug.Print "Die PIN Authentifizierung ist fehlgeschlagen !"
                Exit Sub
            End If

        End If
    End With

End Sub

Private Sub SCARD1_OnConnectError()

    Debug.Print "Verbindungsfehler: " & SCARD1.CardERR

End Sub

Private Sub SCARD1_OnVerifyPIN()

    Debug.Print "Die Chipkarte ist für Schreibzugriffe freigeschaltet !"
    Debug.Print "Sie haben wieder " & SCARD1.
PINRetries & " gültige Versuche."

End Sub

Private Sub SCARD1_OnVerifyPINError()

    With SCARD1
        If .
PINRetries = 0 then
            Debug.Print "Die Chipkarte ist für Schreibzugriffe irreversibel gesperrt !"
        Else
            Debug.Print "Sie haben noch " & .
PINRetries & " gültige(n) Versuch(e)."
        End If
    End With

End Sub

Private Sub SCARD1_OnRemoved()

    SCARD1.ShowTrayIcon False

End Sub

Private Sub SCARD1_OnMCARDClose()

    Debug.Print "Verbindung PC/SC <-> MCARD API, Kartenleser getrennt !"

End Sub

Private Sub
Form_Unload(Cancel as Integer)

    SCARD1.Shutdown

End Sub
 
©2011 by ProScan Elektronische Systeme, Buchholzer Weg 2, 42897 Remscheid, www.smartcardtools.de