Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция 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 [только классические приложения] |
| целевая платформа | Виндоус |
| Header | winscard.h |
| Library | Winscard.lib |
| DLL | Winscard.dll |