Components All New MacOS Windows Linux iOS
Examples Mac & Win Server Client Guides Statistic FMM Blog Deprecated Old

SmartCard.Transmit

Sends a service request to the smart card and expects to receive data back from the card.

Component Version macOS Windows Linux Server iOS SDK
SmartCard 6.3 ✅ Yes ✅ Yes ❌ No ✅ Yes, on macOS and Windows ❌ No
MBS( "SmartCard.Transmit"; SmartCardContext; SendHeader; SendBuffer; RecvLength )   More

Parameters

Parameter Description Example
SmartCardContext The smartcard context reference number. $SmartCardContext
SendHeader The hex encoded protocol header structure for the instruction.
This buffer is in the format of an SCARD_IO_REQUEST structure, followed by the specific protocol control information (PCI).
For the T=0, T=1, and Raw protocols, the PCI structure is constant. The smart card subsystem supplies a global T=0, T=1, or Raw PCI structure, which you can reference by using the symbols T0, T1, and RAW respectively.
With version 7.0 or newert this can be empty to use default header.
"T1"
SendBuffer The hex encoded data to be sent to the card.
For T=0, the data parameters are placed into the address pointed to by pbSendBuffer according to the following structure:

Type name Description
Byte Cla The instruction class
Byte Ins The instruction code
Byte P1 Parameter to the instruction
Byte P2 Parameter to the instruction
Byte P3 Size of I/O transfer

The data sent to the card should immediately follow the send buffer. In the special case where no data is sent to the card and no data is expected in return, P3 is not sent.
RecvLength The number of bytes for the receiving buffer.
How many bytes the plugin allocates for the answer. Can be much bigger than what you expect.
1024

Result

Returns Receive Buffer or error.

Description

Sends a service request to the smart card and expects to receive data back from the card.
Returns receive buffer hex encoded.

see also
https://msdn.microsoft.com/en-us/library/windows/desktop/aa379804(v=vs.85).aspx

You can use SmartCard.TransmitReceiveHeader to return last Transmit's receive header.

Examples

Query serial number of card:

MBS( "SmartCard.Transmit"; $Context; "0200000008000000"; "00ca018108"; 8 )

Query version:

MBS( "SmartCard.Transmit"; $Context; "0200000008000000"; "00ca018202"; 2 )

Connect and query value:

If [MBS( "SmartCard.Available" ) = 1]
    #Start a new session
    Set Variable [$SCContext; Value:MBS( "SmartCard.Init" )]
    If [MBS( "SmartCard.Valid"; $SCContext )]
        #Query list of readers and pick first
        Set Variable [$SCReader; Value:GetValue ( MBS( "SmartCard.ListReaders"; $SCContext) ; 1 )]
        If [MBS("IsError") = 0]
            # Connect to card
            Set Variable [$SCConnect; Value:MBS( "SmartCard.Connect"; $SCContext ; $SCReader ; "Shared"; "any")]
            Set Variable [$PRotocol; Value:MBS( "SmartCard.GetActiveProtocol"; $SCContext)]
            If [$SCConnect = "OK"]
                #Run a query
                Set Variable [$Result; Value:MBS( "SmartCard.Transmit"; $SCContext; "0200000008000000"; "00ca018202"; 512 )]
                #Result is 4 bytes. Starts with C901 for Version 5.0 or C903 for Version 5.3
                Show Custom Dialog ["Version"; $result]
                #Disconnect
                Set Variable [$SCDisconnect; Value:MBS( "SmartCard.Disconnect"; $SCContext; "Leave" )]
            Else
                Show Custom Dialog ["Error"; "No card available."]
            End If
        End If
        #End Card Session
        Set Variable [$SCRelease; Value:MBS( "SmartCard.Release" ; $SCContext )]
    Else
        Show Custom Dialog ["Error"; "Failed to initalize"]
    End If
Else
    Show Custom Dialog ["Error"; "No SmartCard API on this OS."]
End If

Transmit select file commands to go into folder for EID cards:

# select folder 3F00
MBS( "SmartCard.Transmit"; 58001; "T1"; "00A4020C023F0000"; 200 )
# select subfolder DF 01
MBS( "SmartCard.Transmit"; 58001; "T1"; "00A4020C02DF0100"; 200 )
# now do readfile of 4031

Reset card:

MBS( "SmartCard.Transmit"; $Context; "0200000008000000"; "0000000000"; 0 ) // reset command is all zero.

See also

Release notes

Example Databases

Blog Entries

This function checks for a license.

Created 13th June 2016, last changed 16th January 2024


SmartCard.Status - SmartCard.TransmitReceiveHeader