Fungsi SCardGetAttrib (winscard.h)

Fungsi SCardGetAttrib mengambil atribut pembaca saat ini untuk handel yang diberikan. Ini tidak mempengaruhi statuspembaca, driver, atau kartu.

Sintaks

LONG SCardGetAttrib(
  [in]      SCARDHANDLE hCard,
  [in]      DWORD       dwAttrId,
  [out]     LPBYTE      pbAttr,
  [in, out] LPDWORD     pcbAttrLen
);

Parameter

[in] hCard

Nilai referensi yang dikembalikan dari SCardConnect.

[in] dwAttrId

Pengidentifikasi untuk atribut yang akan didapatkan. Tabel berikut ini mencantumkan nilai yang mungkin untuk dwAttrId. Nilai-nilai ini bersifat baca-saja. Perhatikan bahwa vendor mungkin tidak mendukung semua atribut.

Nilai Makna
SCARD_ATTR_ATR_STRING
Jawaban untuk mengatur ulang (ATR) string.
SCARD_ATTR_CHANNEL_ID
DWORD dikodekan sebagai 0xDDDDCCCC, di mana DDDD = jenis saluran data dan CCCC = nomor saluran:
  • Pengodean berikut didefinisikan untuk DDDD:
  • 0x01 serial I/O; CCCC adalah nomor port.
  • 0x02 I/O paralel; CCCC adalah nomor port.
  • 0x04 port keyboard PS/2; CCCC adalah nol.
  • 0x08 SCSI; CCCC adalah nomor ID SCSI.
  • 0x10 IDE; CCCC adalah nomor perangkat.
  • 0x20 USB; CCCC adalah nomor perangkat.
  • 0xF antarmuka yang ditentukan vendory dengan y dalam rentang nol hingga 15; CCCC didefinisikan vendor.
SCARD_ATTR_CHARACTERISTICS
DWORD menunjukkan karakteristik mekanis mana yang didukung. Jika nol, tidak ada karakteristik khusus yang didukung. Perhatikan bahwa beberapa bit dapat diatur:
  • Mekanisme menelan Kartu 0x00000001
  • Mekanisme ejeksi Kartu 0x00000002
  • mekanisme penangkapan Kartu 0x00000004
Semua nilai lainnya dicadangkan untuk digunakan di masa mendatang (RFU).
SCARD_ATTR_CURRENT_BWT
Waktu tunggu blok saat ini.
SCARD_ATTR_CURRENT_CLK
Laju jam saat ini, dalam kHz.
SCARD_ATTR_CURRENT_CWT
Waktu tunggu karakter saat ini.
SCARD_ATTR_CURRENT_D
Faktor konversi laju bit.
SCARD_ATTR_CURRENT_EBC_ENCODING
Pengodean kontrol blok kesalahan saat ini.

0 = pemeriksaan redundansi longitudinal (LRC)

1 = pemeriksaan redundansi siklus (CRC)

SCARD_ATTR_CURRENT_F
Faktor konversi jam.
SCARD_ATTR_CURRENT_IFSC
Ukuran byte saat ini untuk kartu ukuran bidang informasi.
SCARD_ATTR_CURRENT_IFSD
Ukuran byte saat ini untuk perangkat ukuran bidang informasi.
SCARD_ATTR_CURRENT_N
Waktu penjaga saat ini.
SCARD_ATTR_CURRENT_PROTOCOL_TYPE
DWORD dikodekan sebagai 0x0rrrpppp di mana rrr adalah RFU dan harus 0x000. pppp mengodekan jenis protokol saat ini. Bit mana pun yang telah ditetapkan menunjukkan protokol ISO mana yang saat ini sedang digunakan. (Misalnya, jika bit nol diatur, protokol T=0 berlaku.)
SCARD_ATTR_CURRENT_W
Waktu tunggu pekerjaan saat ini.
SCARD_ATTR_DEFAULT_CLK
Laju jam default, dalam kHz.
SCARD_ATTR_DEFAULT_DATA_RATE
Tingkat data default, dalam bps.
SCARD_ATTR_DEVICE_FRIENDLY_NAME
Nama tampilan pembaca.
SCARD_ATTR_DEVICE_IN_USE
Disiapkan untuk penggunaan masa mendatang.
SCARD_ATTR_DEVICE_SYSTEM_NAME
Nama sistem pembaca.
SCARD_ATTR_DEVICE_UNIT
Contoh pembaca vendor ini yang terpasang pada komputer. Instans pertama adalah unit perangkat 0, berikutnya adalah unit 1 (jika merupakan merek pembaca yang sama) dan sebagainya. Dua merek pembaca yang berbeda keduanya akan memiliki nol untuk nilai ini.
SCARD_ATTR_ICC_INTERFACE_STATUS
Byte tunggal. Nol jika kontak listrik kartu pintar tidak aktif; bukan nol jika kontak aktif.
SCARD_ATTR_ICC_PRESENCE
Byte tunggal yang menunjukkan kehadiran kartu pintar:

0 = tidak ada

1 = kartu ada tetapi tidak ditelan (hanya berlaku jika pembaca mendukung menelan kartu pintar)

2 = kartu ada (dan ditelan jika pembaca mendukung menelan kartu pintar)

4 = kartu disita.

SCARD_ATTR_ICC_TYPE_PER_ATR
Byte tunggal yang menunjukkan jenis kartu pintar:

0 = tipe tidak diketahui

1 = 7816 Asinkron

2 = 7816 Sinkron

Nilai lain RFU.

SCARD_ATTR_MAX_CLK
Laju jam maksimum, dalam kHz.
SCARD_ATTR_MAX_DATA_RATE
Tingkat data maksimum, dalam bps.
SCARD_ATTR_MAX_IFSD
Byte maksimum untuk perangkat ukuran file informasi.
SCARD_ATTR_POWER_MGMT_SUPPORT
Nol jika perangkat tidak mendukung daya mati saat kartu pintar dimasukkan. Bukan nol jika tidak.
SCARD_ATTR_PROTOCOL_TYPES
DWORD dikodekan sebagai 0x0rrrpppp di mana rrr adalah RFU dan harus 0x000. pppp mengodekan jenis protokol yang didukung. '1' dalam posisi bit tertentu menunjukkan dukungan untuk protokol ISO terkait, jadi jika bit nol dan satu diatur, protokol T=0 dan T=1 didukung.
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
Nomor seri perangkat antarmuka yang disediakan vendor.
SCARD_ATTR_VENDOR_IFD_TYPE
Jenis perangkat antarmuka yang disediakan vendor (penetapan model pembaca).
SCARD_ATTR_VENDOR_IFD_VERSION
Versi perangkat antarmuka yang disediakan vendor (DWORD dalam bentuk 0xMMmmbbbb di mana MM = versi utama, mm = versi minor, dan bbbb = nomor build).
SCARD_ATTR_VENDOR_NAME
Nama vendor.

[out] pbAttr

Pointer ke buffer yang menerima atribut yang ID-nya disediakan dalam dwAttrId. Jika nilai ini NULL, SCardGetAttrib mengabaikan panjang buffer yang disediakan dalam pcbAttrLen, menulis panjang buffer yang akan dikembalikan jika parameter ini belum NULL ke pcbAttrLen, dan mengembalikan kode keberhasilan.

[in, out] pcbAttrLen

Panjang buffer pbAttr dalam byte, dan menerima panjang sebenarnya dari atribut yang diterima Jika panjang buffer ditentukan sebagai SCARD_AUTOALLOCATE, maka pbAttr dikonversi ke penunjuk ke penunjuk byte, dan menerima alamat blok memori yang berisi atribut . Blok memori ini harus dialokasikan dengan SCardFreeMemory.

Mengembalikan nilai

Fungsi ini mengembalikan nilai yang berbeda tergantung pada apakah berhasil atau gagal.

Menampilkan kode Deskripsi
Berhasil
SCARD_S_SUCCESS.
Nilai atribut tidak didukung.
ERROR_NOT_SUPPORTED.
Kegagalan Lainnya
Kode kesalahan. Untuk informasi selengkapnya, lihat Nilai Pengembalian Kartu Pintar.

Keterangan

Fungsi SCardGetAttrib adalah fungsi akses kartu langsung. Untuk informasi selengkapnya tentang fungsi akses langsung lainnya, lihat Fungsi Akses Kartu Langsung.

Contoh

Contoh berikut menunjukkan cara mengambil atribut untuk pembaca kartu. Contoh mengasumsikan bahwa hCardHandle adalah handel valid yang diperoleh dari panggilan sebelumnya ke fungsi SCardConnect .

LPBYTE   pbAttr = NULL;
DWORD    cByte = SCARD_AUTOALLOCATE;
DWORD    i;
LONG     lReturn;

lReturn = SCardGetAttrib(hCardHandle,
                         SCARD_ATTR_VENDOR_NAME,
                         (LPBYTE)&pbAttr,
                         &cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
    if ( ERROR_NOT_SUPPORTED == lReturn )
        printf("Value not supported\n");
    else
    {
        // Some other error occurred.
        printf("Failed SCardGetAttrib - %x\n", lReturn);
        exit(1);  // Or other appropriate action
    }
}
else
{
    // Output the bytes.
    for (i = 0; i < cByte; i++)
        printf("%c", *(pbAttr+i));
    printf("\n");

    // Free the memory when done.
    // hContext was set earlier by SCardEstablishContext
    lReturn = SCardFreeMemory( hContext, pbAttr );
}

Persyaratan

Persyaratan Nilai
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

SCardConnect

SCardFreeMemory

SCardSetAttrib