開啟某銀行 WebATM 網站,裝好 ActiveX 元件,接妥讀卡機,插入金融卡,網頁卻彈出 Smart Card 服務未啟動訊息。網站貼心地將我導到 FAQ,教導如何開啟 Smart Card 服務… 我確認 Windows 8 上的Smart Card 服務處於開啟狀態,但銀行 WebATM 元件就是一口咬定服務沒開。明明要轉帳,一回神,已捲好袖子準備射茶包… orz
由網站 JavaSript 追到以下邏輯:
bRdrReady = XCsp.ConnectReader();
if (bRdrReady != 0)
{
if (bRdrReady==-2146435043){
if(BrowserDetect.OS=="Linux"){
alert("請確認 pcscd 是否已啓動!");
window.location="/webatm/Q&A_016.htm";
}else{
if(BrowserDetect.OS=="Mac"){
alert("請確認 pcscd 是否已啓動!");
window.location="/webatm/Q&A_017.htm";
}else{
alert("請確認Smart Card Service是否已啓動!");
window.location="/webatm/Q&A_012.htm#10";
}
}
}else{
alert("讀卡機連線失敗,Rtn=" + bRdrReady);
}
hidePinRow(2);
return;
}
這裡面有個關鍵字 –2146435043,換算成 16 進位是 8010001d(可用 string.Format("{0:x4}", -2146435043)轉換)。以 Card Service 跟 0x8010001d 關鍵字爬文,大多是服務未啟動案例,但有一篇符合我的情境。我透過遠端桌面連上NB讀取讀卡機,文中提到 RDP Client 6.0 Smart Card Redirection 功能有個 Bug 會導致 0x8010001d。
改為直接操作後,問題排除!