Función SCardTransmit (winscard.h)
La función SCardTransmit envía una solicitud de servicio a la tarjeta inteligente y espera recibir datos de vuelta de la tarjeta.
Sintaxis
LONG SCardTransmit(
[in] SCARDHANDLE hCard,
[in] LPCSCARD_IO_REQUEST pioSendPci,
[in] LPCBYTE pbSendBuffer,
[in] DWORD cbSendLength,
[in, out, optional] LPSCARD_IO_REQUEST pioRecvPci,
[out] LPBYTE pbRecvBuffer,
[in, out] LPDWORD pcbRecvLength
);
Parámetros
[in] hCard
Valor de referencia devuelto por la función SCardConnect .
[in] pioSendPci
Puntero a la estructura del encabezado de protocolo para la instrucción . Este búfer tiene el formato de una estructura de SCARD_IO_REQUEST , seguido de la información de control de protocolo específica (PCI).
Para los protocolos T=0, T=1 y Raw, la estructura PCI es constante. El subsistema de tarjeta inteligente proporciona una estructura T=0, T=1 o PCI sin formato, a la que puede hacer referencia mediante los símbolos SCARD_PCI_T0, SCARD_PCI_T1 y SCARD_PCI_RAW respectivamente.
[in] pbSendBuffer
Puntero a los datos reales que se van a escribir en la tarjeta.
Para T=0, los parámetros de datos se colocan en la dirección a la que apunta pbSendBuffer según la estructura siguiente:
struct {
BYTE
bCla, // the instruction class
bIns, // the instruction code
bP1, // parameter to the instruction
bP2, // parameter to the instruction
bP3; // size of I/O transfer
} CmdBytes;
Los datos enviados a la tarjeta deben seguir inmediatamente el búfer de envío. En el caso especial en el que no se envía ningún dato a la tarjeta y no se espera ningún dato a cambio, bP3 no se envía.
[in] cbSendLength
Longitud, en bytes, del parámetro pbSendBuffer .
Para T=0, en el caso especial en el que no se envía ningún dato a la tarjeta y no se espera ningún dato a cambio, esta longitud debe reflejar que no se envía el miembro bP3 ; la longitud debe ser sizeof(CmdBytes) - sizeof(BYTE)
.
[in, out, optional] pioRecvPci
Puntero a la estructura del encabezado de protocolo para la instrucción, seguida de un búfer en el que recibir cualquier información de control de protocolo (PCI) devuelta específica del protocolo en uso. Este parámetro puede ser NULL si no se devuelve pci.
[out] pbRecvBuffer
Puntero a los datos devueltos de la tarjeta.
Para T=0, los datos van seguidos inmediatamente de los bytes de estado SW1 y SW2. Si no se devuelve ningún dato de la tarjeta, este búfer solo contendrá los bytes de estado SW1 y SW2.
[in, out] pcbRecvLength
Proporciona la longitud, en bytes, del parámetro pbRecvBuffer y recibe el número real de bytes recibidos de la tarjeta inteligente.
Este valor no se puede SCARD_AUTOALLOCATE porque SCardTransmit no admite SCARD_AUTOALLOCATE.
Para T=0, el búfer de recepción debe tener al menos dos bytes de longitud para recibir los bytes de estado SW1 y SW2.
Valor devuelto
Si la función envía correctamente una solicitud de servicio a la tarjeta inteligente, el valor devuelto se SCARD_S_SUCCESS.
Si la función presenta un error, devuelve un código de error. Para obtener más información, consulte Valores devueltos de tarjeta inteligente.
Comentarios
La función SCardTransmit es una función de acceso de lector y tarjeta inteligente. Para obtener información sobre otras funciones de acceso, consulte Funciones de acceso de lector y tarjeta inteligente.
Para el protocolo T=0, los datos recibidos son los códigos de estado SW1 y SW2, posiblemente precedidos por los datos de respuesta. Los párrafos siguientes proporcionan información sobre los búferes de envío y recepción usados para transferir datos y emitir un comando.
Ejemplos
En el ejemplo siguiente se muestra cómo enviar una solicitud de servicio a la tarjeta inteligente.
// Transmit the request.
// lReturn is of type LONG.
// hCardHandle was set by a previous call to SCardConnect.
// pbSend points to the buffer of bytes to send.
// dwSend is the DWORD value for the number of bytes to send.
// pbRecv points to the buffer for returned bytes.
// dwRecv is the DWORD value for the number of returned bytes.
lReturn = SCardTransmit(hCardHandle,
SCARD_PCI_T0,
pbSend,
dwSend,
NULL,
pbRecv,
&dwRecv );
if ( SCARD_S_SUCCESS != lReturn )
{
printf("Failed SCardTransmit\n");
exit(1); // or other appropriate error action
}
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winscard.h |
Library | Winscard.lib |
Archivo DLL | Winscard.dll |