<sub id="62jh5"><p id="62jh5"><li id="62jh5"></li></p></sub>
  1. <center id="62jh5"></center>

    <legend id="62jh5"></legend>
    <sub id="62jh5"></sub>
    射頻IC卡讀卡器,RFID讀寫(xiě)器,讀寫(xiě)模塊產(chǎn)品研發(fā)定制和銷(xiāo)售,軟件定制服務(wù)。我們的目標(biāo):一流的產(chǎn)品,五星級(jí)服務(wù)!對(duì)客戶(hù)的需求做出快速響應(yīng)。
    企業(yè)使用員工卡登錄計(jì)算機(jī)配置
    Windows智能卡登錄系統(tǒng)
    WEB與發(fā)卡器
    WEB瀏覽器與UHF超高頻讀卡器
    WEB讀卡器 IC卡(NFC)發(fā)卡器
    PLC讀卡器 IC卡模塊
    安卓讀卡器 UHF讀卡器
    PCSC讀卡器 智能卡登錄
    新聞搜索
     
    最新新聞
    1  如何給IC卡寫(xiě)自定義
    2  如何配置刷卡登錄電腦
    3  插卡登錄拔卡鎖屏
    4  在web頁(yè)面實(shí)現(xiàn)智能
    5  關(guān)于IC卡密鑰理解和
    6  BS架構(gòu)下NFC讀寫(xiě)
    7  關(guān)于IC卡密鑰理解和
    8  如何配置NFC讀卡器
    9  企業(yè)使用員工卡登錄計(jì)
    10  Java JNI調(diào)用
    熱門(mén)新聞 點(diǎn)擊
     友我科技推出新一代農(nóng) 182023
     友我科技RFID讀寫(xiě) 178514
     友我科技發(fā)布PC/S 178419
     友我科技RFID產(chǎn)品 115169
     射頻IC卡和IC卡讀 77866
     射頻卡讀寫(xiě)模塊選購(gòu)指 61048
     友我科技PCSC雙界 51431
     ISO14443 I 26483
     射頻卡讀寫(xiě)器發(fā)卡器介 23817
     接觸式IC卡接口原理 18985
    產(chǎn)品推薦
       
      智能卡登錄系統(tǒng)(家庭版)  
     
       
      智能卡熱力表充值管理系統(tǒng)  
     
       
      智能卡天然氣表管理系統(tǒng)  
     
       
      智能卡水表充值管理系統(tǒng)  
     
       
      智能卡電表充值管理系統(tǒng)  
     
         新 聞 中 心

    友我科技PCSC雙界面讀寫(xiě)器YW-606開(kāi)發(fā)指南

    雙擊自動(dòng)滾屏 發(fā)布者:YOWO RFID 發(fā)布時(shí)間: 閱讀:51431

              友我科技PCSC雙界面讀寫(xiě)器YW-606開(kāi)發(fā)指南
     
     
    1.建立資源管理器的上下文
    函數(shù)ScardEstablishContext()用于建立將在其中進(jìn)行設(shè)備數(shù)據(jù)庫(kù)操作的資源管理器上下文(范圍)。
    函數(shù)原型:LONG SCardEstablishContext(DWORD dwScope,  LPCVOID pvReserved1,  LPCVOID pvReserved2,  LPSCARDCONTEXT phContext);
    各個(gè)參數(shù)的含義:
    (1)dwScope:輸入類(lèi)型;表示資源管理器上下文范圍,取值為:SCARD_SCOPE_USER(在用戶(hù)域中完成設(shè)備數(shù)據(jù)庫(kù)操作)、SCARD_SCOPE_SYSTEM(在系統(tǒng)域中完成設(shè)備數(shù)據(jù)庫(kù)操作)。要求應(yīng)用程序具有相應(yīng)的操作權(quán)限。
    (2)pvReserved1:輸入類(lèi)型;保留,必須為NULL。
    (3)pvReserved2:輸入類(lèi)型;保留,必須為NULL。
    (4)phContext:輸出類(lèi)型;建立的資源管理器上下文的句柄。 
     
     
    下面是建立資源管理器上下文的代碼:
    SCARDCONTEXT hSC;
    LONG lReturn;
    lReturn = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hSC);
    if ( lReturn!=SCARD_S_SUCCESS )
    printf("Failed SCardEstablishContext\n");
     
    2. 獲得系統(tǒng)中安裝的讀卡器列表
    函數(shù)ScardListReaders()可以列出系統(tǒng)中安裝的讀卡器的名字。
    函數(shù)原型:LONG SCardListReaders(SCARDCONTEXT hContext,  LPCTSTR mszGroups,  LPTSTR mszReaders,  LPDWORD pcchReaders);
    各個(gè)參數(shù)的含義:
    (1)hContext:輸入類(lèi)型;ScardEstablishContext()建立的資源管理器上下文的句柄,不能為NULL。
    (2)mszGroups:輸入類(lèi)型;讀卡器組名,為NULL時(shí),表示列出所有讀卡器。
    (3)mszReaders:輸出類(lèi)型;系統(tǒng)中安裝的讀卡器的名字,各個(gè)名字之間用’\0’分隔,后一個(gè)名字后面為兩個(gè)連續(xù)的’\0’。
    (4)pcchReaders:輸入輸出類(lèi)型;mszReaders的長(zhǎng)度。
    系統(tǒng)中可能安裝多個(gè)讀卡器,因此,需要保存各個(gè)讀卡器的名字,以便以后與需要的讀卡器建立連接。
    下面是獲得系統(tǒng)中安裝的讀卡器列表的代碼:
    char mszReaders[1024];
    LPTSTR pReader, pReaderName[2];
    DWORD dwLen=sizeof(mzsReaders);
    int nReaders=0;
    lReturn = SCardListReaders(hSC, NULL, (LPTSTR)mszReaders, &dwLen);
    if ( lReturn==SCARD_S_SUCCESS )
    {
    pReader = (LPTSTR)pmszReaders;
    while (*pReader !='\0'  )
    {
    if ( nReaders<2 ) //使用系統(tǒng)中前2個(gè)讀卡器
    pReaderName[nReaders++]=pReader;
    printf("Reader: %S\n", pReader );
    //下一個(gè)讀卡器名
    pReader = pReader + strlen(pReader) + 1;
    }
    }
     
    3. 與讀卡器(智能卡)連接
    函數(shù)ScardConnect()在應(yīng)用程序與讀卡器上的智能卡之間建立一個(gè)連接。
    函數(shù)原型:LONG SCardConnect(SCARDCONTEXT hContext,  LPCTSTR szReader,  DWORD dwShareMode,  DWORD dwPreferredProtocols,  LPSCARDHANDLE phCard,  LPDWORD pdwActiveProtocol);
    各個(gè)參數(shù)的含義:
    (1)hContext:輸入類(lèi)型;ScardEstablishContext()建立的資源管理器上下文的句柄。
    (2)szReader:輸入類(lèi)型;包含智能卡的讀卡器名稱(chēng)(讀卡器名稱(chēng)由ScardListReaders()給出)。
    (3)dwShareMode:輸入類(lèi)型;應(yīng)用程序?qū)χ悄芸ǖ牟僮鞣绞剑琒CARD_SHARE_SHARED(多個(gè)應(yīng)用共享同一個(gè)智能卡)、SCARD_SHARE_EXCLUSIVE(應(yīng)用獨(dú)占智能卡)、SCARD_SHARE_DIRECT(應(yīng)用將智能卡作為私有用途,直接操縱智能卡,不允許其它應(yīng)用訪(fǎng)問(wèn)智能卡)。
    (4)dwPreferredProtocols:輸入類(lèi)型;連接使用的協(xié)議,SCARD_PROTOCOL_T0(使用T=0協(xié)議)、SCARD_PROTOCOL_T1(使用T=1協(xié)議)。
    (5)phCard:輸出類(lèi)型;與智能卡連接的句柄。
    (6)PdwActiveProtocol:輸出類(lèi)型;實(shí)際使用的協(xié)議。
    下面是與智能卡建立連接的代碼:
    SCARDHANDLE hCardHandle[2];
    DWORD dwAP;
    lReturn = SCardConnect( hContext, pReaderName[0],    SCARD_SHARE_SHARED,
    SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &hCardHandle[0], &dwAP );
    if ( lReturn!=SCARD_S_SUCCESS )
    {
    printf("Failed SCardConnect\n");
    exit(1);
    }
    與智能卡建立連接后,就可以向智能卡發(fā)送指令,與其交換數(shù)據(jù)了。
     
     
     
     
     
    4. 斷開(kāi)與讀卡器(智能卡)的連接
    在與智能卡的數(shù)據(jù)交換完成后,可以使用函數(shù)ScardDisconnect()終止應(yīng)用與智能卡之間的連接。
    函數(shù)原型:LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition);
    各個(gè)參數(shù)的含義:
    (1)hCard:輸入類(lèi)型;與智能卡連接的句柄。
    (2)dwDisposition:輸入類(lèi)型;斷開(kāi)連接時(shí),對(duì)智能卡的操作,SCARD_LEAVE_CARD(不做任何操作)、SCARD_RESET_CARD(復(fù)位智能卡)、SCARD_UNPOWER_CARD(給智能卡掉電)、SCARD_EJECT_CARD(彈出智能卡)。
    下面是斷開(kāi)與智能卡連接的代碼:
    lReturn = SCardDisconnect(hCardHandle[0], SCARD_LEAVE_CARD);
    if ( lReturn != SCARD_S_SUCCESS )
    {
    printf("Failed SCardDisconnect\n");
    exit(1);
    }
     
    5. 釋放資源管理上下文
    在應(yīng)用程序終止前時(shí),應(yīng)該調(diào)用函數(shù)ScardReleaseContext()釋放資源管理器的上下文。
    函數(shù)原型:LONG SCardReleaseContext(SCARDCONTEXT hContext);
    各個(gè)參數(shù)含義:
    (1)hContext:輸入類(lèi)型;ScardEstablishContext()建立的資源管理器上下文的句柄,不能為NULL。
    下面是釋放資源管理上下文的代碼:
    lReturn = SCardReleaseContext(hSC);
    if ( lReturn!=SCARD_S_SUCCESS )
    printf("Failed SCardReleaseContext\n");
      
     
    以上介紹的通過(guò)PC/SC來(lái)操作智能卡的流程,可以封裝在一個(gè)類(lèi)中。例如,我們可以設(shè)計(jì)一個(gè)類(lèi):
    class CYOWORFIDReader
    {
    private:
    SCARDCONTEXT hSC;
    LONG lReturn;
    char mszReaders[1024];
    LPTSTR pReader, pReaderName[2];
    DWORD dwLen;
    int nReaders, nCurrentReader;
    SCARDHANDLE hCardHandle[2];
    DWORD dwAP;
    public:
    CSmartReader(); //建立上下文、取讀卡器列表
    ~CSmartReader(); //釋放上下文
    void SetCurrentReader(int currentReader);
    int GetReaders(); //獲得讀卡器數(shù)目
    int ConnectReader(); //與當(dāng)前讀卡器建立連接
    int DisConnectReader(); //與當(dāng)前讀卡器斷開(kāi)連接
    int SendCommand(BYTE command[], int commandLength, BYTE result[], int *resultLength); //向讀卡器發(fā)送命令,并接收返回的數(shù)據(jù)。返回值為sw
    };
    這樣,我們就可以方便地使用PC/SC接口了。
     
     
    6. 向智能卡發(fā)送指令
    函數(shù)ScardTransmit()向智能卡發(fā)送指令,并接受返回的數(shù)據(jù)。
    函數(shù)原型:LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_I0_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength);
    各個(gè)參數(shù)的含義:
    (1)hCard:輸入類(lèi)型;與智能卡連接的句柄。
    (2)pioSendPci:輸入類(lèi)型;指令的協(xié)議頭結(jié)構(gòu)的指針,由SCARD_IO_REQUEST結(jié)構(gòu)定義。后面是使用的協(xié)議的協(xié)議控制信息。一般使用系統(tǒng)定義的結(jié)構(gòu),SCARD_PCI_T0(T=0協(xié)議)、 SCARD_PCI_T1(T=1協(xié)議)、SCARD_PCI_RAW(原始協(xié)議)。
    (3)pbSendBuffer:輸入類(lèi)型;要發(fā)送到智能卡的數(shù)據(jù)的指針。
    (4)cbSendLength:輸入類(lèi)型;pbSendBuffer的字節(jié)數(shù)目。
    (5)pioRecvPci:輸入輸出類(lèi)型;指令協(xié)議頭結(jié)構(gòu)的指針,后面是使用的協(xié)議的協(xié)議控制信息,如果不返回協(xié)議控制信息,可以為NULL。
    (6)pbRecvBuffer:輸入輸出類(lèi)型;從智能卡返回的數(shù)據(jù)的指針。
    (7)pcbRecvLength:輸入輸出類(lèi)型;pbRecvBuffer的大小和實(shí)際大小。
     
    對(duì)于T=0協(xié)議,收發(fā)緩沖的用法如下:
    (a)向智能卡發(fā)送數(shù)據(jù):要向智能卡發(fā)送n>0字節(jié)數(shù)據(jù)時(shí),pbSendBuffer 前4字節(jié)分別為T(mén)=0的CLA、INS、P1、P2,第5字節(jié)是n,隨后是n字節(jié)的數(shù)據(jù);cbSendLength值為n+5(4字節(jié)頭+1字節(jié)Lc+n字節(jié)數(shù)據(jù))。PbRecvBuffer將接收SW1、SW2狀態(tài)碼;pcbRecvLength值在調(diào)用時(shí)至少為2,返回后為2。
    BYTE recvBuffer[260];
    int sendSize, recvSize;
    BTYE sw1, sw2;
    BYTE    select_mf[]={0xC0, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00};
    sendSize=7;
    recvSize=sizeof(recvBuffer);
    lReturn = SCardTransmit(hCardHandle[0], SCARD_PCI_T0, select_mf, sendSize,
    NULL, recvBuffer, &recvSize);
    if ( lReturn != SCARD_S_SUCCESS )
    {
    printf("Failed SCardTransmit\n");
    exit(1);
    }
    //返回的數(shù)據(jù),recvSize=2
    sw1=recvBuffer[recvSize-2];
    sw2=recvBuffer[recvSize-1];
     
    (b)從智能卡接收數(shù)據(jù):為從智能卡接收n>0字節(jié)數(shù)據(jù),pbSendBuffer 前4字節(jié)分別為T(mén)=0的CLA、INS、P1、P2,第5字節(jié)是n(即Le),如果從智能卡接收256字節(jié),則第5字節(jié)為0;cbSendLength值為5(4字節(jié)頭+1字節(jié)Le)。PbRecvBuffer將接收智能卡返回的n字節(jié),隨后是SW1、SW2狀態(tài)碼;pcbRecvLength的值在調(diào)用時(shí)至少為 n+2,返回后為n+2。
    BYTE     get_challenge[]={0x00, 0x84, 0x00, 0x00, 0x08};
    sendSize=5;
    recvSize=sizeof(recvBuffer);
    lReturn = SCardTransmit(hCardHandle[0], SCARD_PCI_T0, get_challenge,
    sendSize, NULL, recvBuffer, &recvSize);
    if ( lReturn != SCARD_S_SUCCESS )
    {
    printf("Failed SCardTransmit\n");
    exit(1);
    }
    //返回的數(shù)據(jù), recvSize=10
    sw1=recvBuffer[recvSize-2];
    sw2=recvBuffer[recvSize-1];
    //data=recvBuffer[0]----recvBuffer[7]
     
    (c)向智能卡發(fā)送沒(méi)有數(shù)據(jù)交換的命令:應(yīng)用程序既不向智能卡發(fā)送數(shù)據(jù),也不從智能卡接收數(shù)據(jù),pbSendBuffer 前4字節(jié)分別為T(mén)=0的CLA、INS、P1、P2,不發(fā)送P3;cbSendLength 值必須為4。PbRecvBuffer從智能卡接收SW1、SW2狀態(tài)碼;pcbRecvLength值在調(diào)用時(shí)至少為2,返回后為2。
     
    BYTE    set_flag[]={0x80, 0xFE, 0x00, 0x00};
    sendSize=4;
    recvSize=sizeof(recvBuffer);
    lReturn = SCardTransmit(hCardHandle[0], SCARD_PCI_T0, set_flag, sendSize,
    NULL, recvBuffer, &recvSize);
    if ( lReturn != SCARD_S_SUCCESS )
    {
    printf("Failed SCardTransmit\n");
    exit(1);
    }
    //返回的數(shù)據(jù),recvSize=2
    sw1=recvBuffer[recvSize-2];
    sw2=recvBuffer[recvSize-1];
     
    (d)向智能卡發(fā)送具有雙向數(shù)據(jù)交換的命令:T=0協(xié)議中,應(yīng)用程序不能同時(shí)向智能卡發(fā)送數(shù)據(jù),并從智能卡接收數(shù)據(jù),即發(fā)送到智能卡的指令中,不能同時(shí)有Lc和Le。這只能分兩步實(shí)現(xiàn):向智能卡發(fā)送數(shù)據(jù),接收智能卡返回的狀態(tài)碼,其中,SW2是智能卡將要返回的數(shù)據(jù)字節(jié)數(shù)目;從智能卡接收數(shù)據(jù)(指令為0x00、0xC0、0x00、0x00、Le)。
    BYTE get_response={0x00, 0xc0, 0x00, 0x00, 0x00};
    BYTE    internal_auth[]={0x00, 0x88, 0x00, 0x00, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
    sendSize=13;
    recvSize=sizeof(recvBuffer);
    lReturn = SCardTransmit(hCardHandle[0], SCARD_PCI_T0, internal_auth,
    sendSize, NULL, recvBuffer, &recvSize);
    if ( lReturn != SCARD_S_SUCCESS )
    {
    printf("Failed SCardTransmit\n");
    exit(1);
    }
    //返回的數(shù)據(jù),recvSize=2
    sw1=recvBuffer[recvSize-2];
    sw2=recvBuffer[recvSize-1];
    if ( sw1!=0x61 )
    {
    printf("Failed Command\n");
    exit(1);
    }
    get_response[4]=sw2;
    sendSize=5;
    recvSize=sizeof(recvBuffer);
    lReturn = SCardTransmit(hCardHandle[0], SCARD_PCI_T0, get_response,
    sendSize, NULL, recvBuffer, &recvSize);
    if ( lReturn != SCARD_S_SUCCESS )
    {
    printf("Failed SCardTransmit\n");
    exit(1);
    }
    //返回的數(shù)據(jù),recvSize=10
    sw1=recvBuffer[recvSize-2];
    sw2=recvBuffer[recvSize-1];
    //data=recvBuffer[0]----recvBuffer[7]

    新版RFID讀寫(xiě)器產(chǎn)品手冊(cè)下載


    相關(guān)產(chǎn)品

    最新RFID讀寫(xiě)器產(chǎn)品手冊(cè)
    RFID讀寫(xiě)器SDK開(kāi)發(fā)包
    PC/SC雙界面讀寫(xiě)器YW-606

    打印本頁(yè) || 關(guān)閉窗口
    企業(yè)簡(jiǎn)介||付款方式||網(wǎng)站地圖||友情連接||聯(lián)系我們

    RFID讀寫(xiě)器,IC卡讀卡器, 智能卡讀卡器,RFID讀卡器, 電子標(biāo)簽,CPU卡讀寫(xiě)器,讀卡模塊
    北京友我科技有限公司 版權(quán)所有 (C)2008-2020
    客戶(hù)服務(wù)中心信箱:coodor#126.com(將#改為@)
    熱線(xiàn)直撥: 010-57049038 18910685939 電話(huà)微信:13691531038,13671114914
    京ICP備14016005號(hào)
    微信掃一掃聯(lián)系我們

    微信掃一掃聯(lián)系我們

    友我科技

      <sub id="62jh5"><p id="62jh5"><li id="62jh5"></li></p></sub>
    1. <center id="62jh5"></center>

      <legend id="62jh5"></legend>
      <sub id="62jh5"></sub>
      狠狠人妻久久久久久综合 | 日韩成人性生活 | 杨幂操逼视频 | 日韩黄色无码视频 | 少妇一级淫片免费放香蕉 | 文中字幕一区二区三区视频播放 | 黑人操B视频 | 岳乱妇乱第13集 | 午夜高清| 日韩毛片一级 |

      1
      RFID讀寫(xiě)器產(chǎn)品手冊(cè)下載
      2
      讀寫(xiě)器開(kāi)發(fā)SDK下載
      3
      點(diǎn)擊聯(lián)系友我科技
      4
      點(diǎn)擊聯(lián)系友我科技
      5
      WEB讀卡器開(kāi)發(fā)指南
      6
      Windows讀卡器開(kāi)發(fā)指南
      7
      Android讀卡器開(kāi)發(fā)指南
      8
      Wince讀卡器開(kāi)發(fā)指南
      9
      PLC讀卡器開(kāi)發(fā)指南
      10
      Linux讀卡器開(kāi)發(fā)指南
      11
      單片機(jī)讀卡器開(kāi)發(fā)指南
      12
      PCSC讀卡器開(kāi)發(fā)指南