다음을 통해 공유


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 및 원시 프로토콜의 경우 PCI 구조는 상수입니다. 스마트 카드 하위 시스템은 각각 기호 SCARD_PCI_T0, SCARD_PCI_T1 및 SCARD_PCI_RAW 사용하여 참조할 수 있는 전역 T=0, T=1 또는 원시 PCI 구조를 제공합니다.

[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 은 전송되지 않습니다.

회원 Meaning
bCla
T=0 명령 클래스입니다.
쓰레기통
T=0 명령 클래스의 명령 코드입니다.
bP1, bP2
명령 코드를 완료하는 참조 코드입니다.
bP3
ISO 7816-4, 섹션 8.2.1당 명령 중에 전송될 데이터 바이트 수입니다.

[in] cbSendLength

pbSendBuffer 매개 변수의 길이(바이트)입니다.

T=0의 경우 카드에 데이터가 전송되지 않고 반환되는 데이터가 없는 특수한 경우 이 길이는 bP3 멤버가 전송되지 않음을 반영해야 합니다. 길이는 .이어야 sizeof(CmdBytes) - sizeof(BYTE)합니다.

[in, out, optional] pioRecvPci

명령에 대한 프로토콜 헤더 구조에 대한 포인터와 사용 중인 프로토콜과 관련된 반환된 PCI(프로토콜 제어 정보)를 수신할 버퍼를 찾습니다. PCI가 반환되지 않으면 이 매개 변수는 NULL 일 수 있습니다.

[out] pbRecvBuffer

카드에서 반환된 데이터에 대한 포인터입니다.

T=0의 경우 데이터 바로 뒤에 SW1 및 SW2 상태 바이트가 잇습니다. 카드에서 데이터가 반환되지 않으면 이 버퍼에는 SW1 및 SW2 상태 바이트만 포함됩니다.

[in, out] pcbRecvLength

pbRecvBuffer 매개 변수의 길이(바이트)를 제공하고 스마트 카드에서 받은 실제 바이트 수를 받습니다.

SCardTransmit는 SCARD_AUTOALLOCATE 지원하지 않으므로 이 값을 SCARD_AUTOALLOCATE 수 없습니다.

T=0의 경우 수신 버퍼는 SW1 및 SW2 상태 바이트를 수신하려면 2바이트 이상이어야 합니다.

반환 값

함수가 스마트 카드에 서비스 요청을 성공적으로 보내면 반환 값이 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

참고하십시오

SCARD_IO_REQUEST

SCardConnect