Функция SCardTransmit (winscard.h)
Функция SCardTransmit отправляет запрос на обслуживание смарт-карта и ожидает обратного получения данных из карта.
Синтаксис
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
);
Параметры
[in] hCard
Ссылочное значение, возвращаемое функцией SCardConnect .
[in] pioSendPci
Указатель на структуру заголовков протокола для инструкции. Этот буфер имеет формат структуры SCARD_IO_REQUEST , за которой следует определенная информация об управлении протоколом (PCI).
Для протоколов T=0, T=1 и Raw структура PCI является константой. Подсистема интеллектуального карта предоставляет глобальную структуру T=0, T=1 или raw PCI, на которую можно ссылаться с помощью символов SCARD_PCI_T0, SCARD_PCI_T1 и SCARD_PCI_RAW соответственно.
[in] pbSendBuffer
Указатель на фактические данные для записи в карта.
Для T=0 параметры данных помещаются в адрес, на который указывает pbSendBuffer , в соответствии со следующей структурой:
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;
Данные, отправляемые в карта, должны немедленно следовать за буфером отправки. В особом случае, когда данные не отправляются в карта и данные не ожидаются взамен, bP3 не отправляется.
[in] cbSendLength
Длина параметра pbSendBuffer в байтах.
Для T=0 в особом случае, когда данные не отправляются в карта и данные не ожидаются взамен, эта длина должна отражать, что элемент bP3 не отправляется; длина должна быть sizeof(CmdBytes) - sizeof(BYTE)
равна .
[in, out, optional] pioRecvPci
Указатель на структуру заголовков протокола для инструкции, за которым следует буфер, в котором будут приниматься все возвращаемые сведения о контроле протокола (PCI), относящиеся к используемому протоколу. Этот параметр может иметь значение NULL , если pci не возвращается.
[out] pbRecvBuffer
Указатель на все данные, возвращенные из карта.
Для T=0 за данными сразу же следуют байты состояния SW1 и SW2. Если данные из карта не возвращаются, этот буфер будет содержать только байты состояния SW1 и SW2.
[in, out] pcbRecvLength
Предоставляет длину параметра pbRecvBuffer в байтах и получает фактическое количество байтов, полученных от смарт-карта.
Это значение не может быть SCARD_AUTOALLOCATE, так как SCardTransmit не поддерживает SCARD_AUTOALLOCATE.
Для T=0 буфер получения должен иметь длину не менее двух байт, чтобы получить байты состояния SW1 и SW2.
Возвращаемое значение
Если функция успешно отправляет запрос на обслуживание смарт-карта, возвращаемое значение будет SCARD_S_SUCCESS.
Если функция завершается сбоем, она возвращает код ошибки. Дополнительные сведения см. в разделе Возвращаемые значения смарт-карты.
Комментарии
Функция SCardTransmit — это смарт-карта и функция доступа для чтения. Дополнительные сведения о других функциях доступа см. в разделе Функции доступа к смарт-картам и читателю.
Для протокола T=0 обратно полученные данные представляют собой коды состояния SW1 и SW2, которым, возможно, предшествуют данные ответа. В следующих абзацах содержатся сведения о буферах отправки и получения, используемых для передачи данных и выполнения команды.
Примеры
В следующем примере показана отправка запроса на обслуживание в смарт-карта.
// 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
}
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winscard.h |
Библиотека | Winscard.lib |
DLL | Winscard.dll |