PCSC那事兒 十九 SCardConnect

2021-05-21 17:12:26 字數 3537 閱讀 9259

214

行,scardconnect

定義在winscard_clnt.c

實現如下:

734 long scardconnect(scardcontext hcontext, lpcstr szreader,

735         dword dwsharemode, dword dwpreferredprotocols, lpscardhandle phcard,

736         lpdword pdwactiveprotocol)

737

801

802         /*

803          * read a message from the server

804          */

805         rv = shmclientread(&msgstruct, pscontextmap[dwcontextindex].dwclientid,

806                 pcsclite_client_attempts);

807

808         memcpy(&scconnectstruct, &msgstruct.data, sizeof(scconnectstruct));

809

810         if (rv == -1)

811        

815

816         *phcard = scconnectstruct.hcard;

817         *pdwactiveprotocol = scconnectstruct.dwactiveprotocol;

818

819         if (scconnectstruct.rv == scard_s_success)

820        

831

832         (void)sys_mutexunlock(pscontextmap[dwcontextindex].mmutex);

833

834         profile_end(scconnectstruct.rv)

835

836         return scconnectstruct.rv;

837 }

scardconnect

與引數szreader

指定的讀卡器進行通訊。

737~760

行,進行常規檢查。

761~781

行,解釋過

n次了。

782~790

行,構造

connect_struct

結構體,初始化成員,準備和

pcscd

通訊,進行連線。

791~814

行,向pcscd

發請求,收取回應。 問:

scardconnect

到底要從

pcscd

獲取什麼?

答案是,獲取

scardhandle,

獲取可用的通訊協議。

816         *phcard = scconnectstruct.hcard;

817         *pdwactiveprotocol = scconnectstruct.dwactiveprotocol;

可以看出,

scardconnect

的用心。

818

819         if (scconnectstruct.rv == scard_s_success)

820        

scardaddhandle

定義在winscard_clnt.c

實現如下:

3705 static long scardaddhandle(scardhandle hcard, dword dwcontextindex,

3706         lpcstr readername)

3707

3718         }

3719

3720         return scard_e_no_memory;

3721 }

很早很早以前,就說過了,

pscontextmap

中有兩個重要的控制代碼,它們都是

long

型別。

歸pscontextmap

管。毫無疑問,

scardaddhandle

把得來的

hcard

註冊入pscontextmap .

應用上下文,

大爺。scardaddhandle

把得來的

hcard

進貢給這個大佬。

上面提過了,實際上,分析服務端**,就可以知道

hcontext

是乙個隨機索引,用於獲取

客戶端的應用上下文和服務端的應用上下文,而

hcard

用於獲取客戶端和服務端維護的乙個

channel

也就是在乙個應用上下文中的乙個連線

(乙個應用上下文可以有多個連線)。

scardconnect

結束。

218

219         switch(dwpref)

220        

218~233

行說明對

根據scardconnect

返回的協議型別對

piosendpci

賦值。

234

235         /* apdu select file */

236         printf("select file:");

237         send_length = 7;

238         memcpy(bsendbuffer, "/x00/xa4/x00/x00/x02/x3f/x00", send_length);

239         for (i=0; i

240                 printf(" %02x", bsendbuffer[i]);

241         printf("/n");

242length = sizeof(brecvbuffer);

234~242

做什麼?

選擇檔案,而且是選擇

mf(smart card

的主檔案).往

bsendbuffer

中填充選擇

mf命令字串。

243

244         printf("testing scardtransmit/t/t: ");

245         rv = scardtransmit(hcard, &piosendpci, bsendbuffer, send_length,

246&piorecvpci, brecvbuffer, &length);

python那些事兒pdf Python 那些事兒

python datatype 好久沒用,完了不少,寫個複習筆記以供以後使用 python 最基本的資料是序列,序列的基本特點就是可以索引,但是要記住python的index同c一樣,是從0開始的。序列的基本操作包括 indexing 索引 sliceing 分片 interation 迭代 以及a...

python那些事兒pdf python那些事兒

關於引號 單引號和雙引號的意義相同,都表示字串,單雙引號交替使用可以避免轉義符的麻煩。例如我們想在字串中包含乙個引號通常需要 這樣轉義,而如果用單引號來表示字串,那麼中間的雙引號表示引號就不需要斜槓轉義。例如 print i love kak a 這個輸出裡面就包含了單引號,輸出結果為i love ...

BPM那此事兒 實施BPM方法

任何流程改進類專案都是分階段實施的,第乙個重要的階段就是專案啟動。企業首先要制訂計畫,確定如何部署業務流程管理專案,選擇改進流程,並對領導專案實施的工作人員進行培訓。任何成功的bpm實施計畫至少應該包括以下九個步驟 並不是每個過程改進方法都普遍適用,必須確保您的選擇適合本公司 一旦選定,還要堅持足夠...