IOCTL_SMARTCARD_TRANSMIT
WDM driver version
Operation
The IOCTL_SMARTCARD_TRANSMIT request transmits data to and receives data from the currently inserted smart card.
Input
- Irp->AssociatedIrp.SystemBuffer
- Pointer to an SCARD_IO_REQUEST structure followed by the data to be transmitted. An SCARD_IO_REQUEST structure has the following definition:
typedef struct _SCARD_IO_REQUEST{
DWORD dwProtocol; // Protocol identifier
DWORD cbPciLength; // Protocol Control Information Length
} SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
- Irp->AssociatedIrp.SystemBuffer
- Contains the data to be transmitted to the currently inserted smart card.
- Parameters.DeviceIoControl.InputBufferLength
- Contains the size of the structure plus the length of trailing data bytes (if any). The dwProtocol member must be set to the previously selected protocol, and cbPciLength member must be set to the size of the SCARD_IO_REQUEST structure itself (usually eight bytes). The structure will be used for future protocols. Any data that is to be transmitted to the card must immediately follow this structure.
- Parameters.DeviceIoControl.OutputBufferLength
- Contains the length of the output buffer.
Output
- Irp->AssociatedIrp.SystemBuffer
- Receives the result of the transmission. This buffer must also begin with an SCARD_IO_REQUEST structure. Any data that was received from the card must be stored immediately after the structure.
Since the input buffer and the output buffer are pointing to the same memory area, it is the driver's responsibility to avoid overwriting the input data. Use the Smart Card Driver Library to ensure that the input data is not overwritten.
I/O Status
Information receives the size of the SCARD_IO_REQUEST structure plus the number of bytes received from the card. Status can be one of the following values.
| Status |
Meaning |
| STATUS_SUCCESS |
The transmission was successful. |
| STATUS_NO_MEDIA |
No card is in the reader. |
| STATUS_IO_TIMEOUT |
The operation has timed out. |
| STATUS_INVALID_DEVICE_STATE |
The protocol in the header does not match the previously selected card protocol. |
Headers
Defined in winsmcrd.h. Include winsmcrd.h.
VxD driver version
Operation
The IOCTL_SMARTCARD_TRANSMIT request transmits data to and receives data from the currently inserted smart card.
Input
- DiocParams->lpvInBuffer
- Pointer to an SCARD_IO_REQUEST structure, which has the following definition:
typedef struct _SCARD_IO_REQUEST{
DWORD dwProtocol; // Protocol identifier
DWORD cbPciLength; // Protocol Control Information Length
} SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
- DiocParams->cbInBuffer
- Contains the size of the structure plus the length of trailing data bytes (if any). The dwProtocol member must be set to the previously selected protocol, and the cbPciLength member must be set to the size of the SCARD_IO_REQUEST structure itself (usually eight bytes). The structure will be used for future protocols. Any data that is to be transmitted to the card must immediately follow this structure.
- DiocParams->cbOutBuffer
- Contains the length of the output buffer.
Output
- DiocParams->lpvOutBuffer
- Receives the result of the transmission. This buffer must also begin with an SCARD_IO_REQUEST structure. Any data that was received from the card must be stored immediately after the structure.
- DiocParams->lpcbBytesReturned
- Receives the size of the SCARD_IO_REQUEST structure plus the number of bytes received from the card.
I/O Status Block
The following are possible return values.
| Value |
Meaning |
| STATUS_SUCCESS |
The transmission was successful. |
| STATUS_NO_MEDIA |
No card is in the reader. |
| STATUS_IO_TIMEOUT |
The operation has timed out. |
| STATUS_INVALID_DEVICE_STATE |
The protocol in the header does not match the previously selected card protocol. |
Headers
Defined in winsmcrd.h. Include winsmcrd.h.