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實施計畫至少應該包括以下九個步驟 並不是每個過程改進方法都普遍適用,必須確保您的選擇適合本公司 一旦選定,還要堅持足夠...