다음을 통해 공유


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

멤버 의미
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 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winscard.h
라이브러리 Winscard.lib
DLL Winscard.dll

추가 정보

SCARD_IO_REQUEST

SCardConnect