Fungsi SCardTransmit (winscard.h)

Fungsi SCardTransmit mengirimkan permintaan layanan ke kartu pintar dan mengharapkan untuk menerima data kembali dari kartu.

Sintaks

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
);

Parameter

[in] hCard

Nilai referensi yang dikembalikan dari fungsi SCardConnect .

[in] pioSendPci

Penunjuk ke struktur header protokol untuk instruksi. Buffer ini dalam format struktur SCARD_IO_REQUEST , diikuti oleh informasi kontrol protokol (PCI) tertentu.

Untuk protokol T=0, T=1, dan Raw, struktur PCI konstan. Subsistem kartu pintar memasok struktur T=0, T=1, atau PCI Mentah global, yang dapat Anda referensikan dengan menggunakan simbol masing-masing SCARD_PCI_T0, SCARD_PCI_T1, dan SCARD_PCI_RAW.

[in] pbSendBuffer

Penunjuk ke data aktual yang akan ditulis ke kartu.

Untuk T=0, parameter data ditempatkan ke alamat yang ditujukan oleh pbSendBuffer sesuai dengan struktur berikut:

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;

Data yang dikirim ke kartu harus segera mengikuti buffer kirim. Dalam kasus khusus di mana tidak ada data yang dikirim ke kartu dan tidak ada data yang diharapkan sebagai pengembalian, bP3 tidak dikirim.

Anggota Makna
bCla
Kelas instruksi T=0.
Sampah
Kode instruksi di kelas instruksi T=0.
bP1, bP2
Kode referensi yang melengkapi kode instruksi.
bP3
Jumlah byte data yang akan dikirimkan selama perintah, per ISO 7816-4, Bagian 8.2.1.

[in] cbSendLength

Panjangnya, dalam byte, dari parameter pbSendBuffer .

Untuk T=0, dalam kasus khusus di mana tidak ada data yang dikirim ke kartu dan tidak ada data yang diharapkan sebagai imbalannya, panjang ini harus mencerminkan bahwa anggota bP3 tidak dikirim; panjangnya harus sizeof(CmdBytes) - sizeof(BYTE).

[in, out, optional] pioRecvPci

Arahkan ke struktur header protokol untuk instruksi, diikuti oleh buffer untuk menerima informasi kontrol protokol (PCI) yang dikembalikan khusus untuk protokol yang digunakan. Parameter ini bisa NULL jika tidak ada PCI yang dikembalikan.

[out] pbRecvBuffer

Arahkan ke data apa pun yang dikembalikan dari kartu.

Untuk T=0, data segera diikuti oleh byte status SW1 dan SW2. Jika tidak ada data yang dikembalikan dari kartu, maka buffer ini hanya akan berisi byte status SW1 dan SW2.

[in, out] pcbRecvLength

Memasok panjang, dalam byte, dari parameter pbRecvBuffer dan menerima jumlah byte aktual yang diterima dari kartu pintar.

Nilai ini tidak dapat SCARD_AUTOALLOCATE karena SCardTransmit tidak mendukung SCARD_AUTOALLOCATE.

Untuk T=0, buffer penerima harus setidaknya dua byte panjang untuk menerima byte status SW1 dan SW2.

Mengembalikan nilai

Jika fungsi berhasil mengirim permintaan layanan ke kartu pintar, nilai yang dikembalikan SCARD_S_SUCCESS.

Jika fungsi gagal, fungsi akan mengembalikan kode kesalahan. Untuk informasi selengkapnya, lihat Nilai Pengembalian Kartu Pintar.

Keterangan

Fungsi SCardTransmit adalah kartu pintar dan fungsi akses pembaca . Untuk informasi tentang fungsi akses lainnya, lihat Fungsi Akses Kartu Pintar dan Pembaca.

Untuk protokol T=0, data yang diterima kembali adalah kode status SW1 dan SW2, mungkin didahului oleh data respons. Paragraf berikut memberikan informasi tentang buffer kirim dan terima yang digunakan untuk mentransfer data dan mengeluarkan perintah.

Contoh

Contoh berikut menunjukkan pengiriman permintaan layanan ke kartu pintar.

//  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
}

Persyaratan

   
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header winscard.h
Pustaka Winscard.lib
DLL Winscard.dll

Lihat juga

SCARD_IO_REQUEST

SCardConnect