RDF_SET_PROTOCOL (Mandatory)

The RDF_SET_PROTOCOL callback function selects a transmission protocol for the currently inserted card.

NTSTATUS 
(*ReaderFunction[RDF_SET_PROTOCOL])(
  PSMARTCARD_EXTENSION SmartcardExtension
);
 

Parameters

SmartcardExtension
Points to the smart card extension of the device.

Input Values

SmartcardExtension->MajorIoControlCode
Contains IOCTL_SMARTCARD_SET_PROTOCOL.
SmartcardExtension->MinorIoControlCode
Contains a mask of protocols combined with the bitwise OR operator that the caller accepts for further transmissions.
Value Meaning
SCARD_PROTOCOL_RAW Selects raw protocol.
SCARD_PROTOCOL_T0 Selects the ISO T=0 protocol.
SCARD_PROTOCOL_T1 Selects the ISO T=1 protocol.
SCARD_PROTOCOL_DEFAULT Do not do PTS selection even if the card only supports one protocol.
SCARD_PROTOCOL_OPTIMAL Do PTS selection.

SmartcardExtension->IoRequest.ReplyBufferLength
Contains the length of the reply buffer.

Output Values

SmartcardExtension->IoRequest.ReplyBuffer
This buffer receives the selected protocol.
SmartcardExtension->IoRequest.Information
Set to sizeof(ULONG).

Remarks

The caller can supply a mask of protocols that it accepts. It is the driver's decision to select one protocol out of the mask. After the driver has selected a protocol, it must return the selected protocol in SmartcardExtension->IoRequest.ReplyBuffer.

Return Values

This function returns an NTSTATUS value. Possible values are the following.

Value Meaning
STATUS_SUCCESS A protocol was successfully selected.
STATUS_NO_MEDIA No card is in the reader.
STATUS_IO_TIMEOUT The request has timed out.
STATUS_BUFFER_TOO_SMALL The user buffer is not large enough to hold a ULONG.
STATUS_INVALID_DEVICE_STATE The reader is not in the correct state to select a protocol. This is the case when a card is inserted, but not reset.
STATUS_INVALID_DEVICE_REQUEST The mask contains an unknown protocol.