<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > USB安全鑰功能擴(kuò)展與優(yōu)化設(shè)計

          USB安全鑰功能擴(kuò)展與優(yōu)化設(shè)計

          作者: 時間:2009-04-09 來源:網(wǎng)絡(luò) 收藏

          新增中,主要完成的兩個就是KeyID的讀取和修改,即實現(xiàn)Get_KeyID和Set_KeyID。程序構(gòu)思大致是:對于Get_KeyID,在接收到PC端發(fā)來的讀取KeyID的中斷后,立即從端點1發(fā)送8字節(jié)的KeyID,這一段沒有什么特別之處;對于Set_KeyID,在接收到信號后,立即轉(zhuǎn)入Set_KeyID子程序。首先將存儲KeyID的Flash去保護(hù),然后寄存器置位,即在硬件上給Flash一個高電平,接著進(jìn)行擦除,再將保存于緩沖區(qū)的PC發(fā)來的新KeyID存儲到Flash中。最后,置Flash狀態(tài)寄存器位,給Flash加保護(hù)。

          2.4 PC端新增功能的驅(qū)動程序

          Windows 98的驅(qū)動程序從結(jié)構(gòu)上來說分為兩層:內(nèi)核層和用戶層。的客戶驅(qū)動程序?qū)儆谟脩魧?而類驅(qū)動程序和底層驅(qū)動程序則屬于內(nèi)核層。目前,USB還屬于起步階段,Windows對USB的支持還不夠完善,僅支持內(nèi)核層。USB開發(fā)人員所要做的,就是開發(fā)客戶驅(qū)動程序,直接與類驅(qū)動程序打交道。

          HID屬于USB設(shè)備類中的一個子類,Windows對它提供了非常強(qiáng)大的支持,尤其是在用戶層提供了Hid.dll,其中包含了用戶層驅(qū)動程序與類驅(qū)動程序通信需要的各種功能模塊,將它們以API的形式提供給用戶函數(shù)接口。這樣,在編寫客戶驅(qū)動程序的時候就可以直接調(diào)用這些API函數(shù)來完成諸如IN、OUT等功能,大大降低了編寫驅(qū)動程序的難度。

          HID客戶驅(qū)動程序訪問HID類驅(qū)動程序,由HID類驅(qū)動程序完成大多數(shù)工作,而硬件交互由HID小驅(qū)動程序HidUsb.sys處理,HID小驅(qū)動程序調(diào)用USB底層驅(qū)動程序USBD.sys訪問設(shè)備。

          這里介紹用戶模式的HID客戶驅(qū)動程序過程。它主要包括三個方面的工作:

          ?查找所有HID設(shè)備;

          ?對于查找到的每一個HID設(shè)備,檢查其功能,判斷是否為感興趣的設(shè)備;

          ?根據(jù)用戶需要讀取HID輸入Report(Feature)或者寫HID輸出Report(Feature)。

          程序流程如下:

          (1)查找USB鑰設(shè)備;

          (2)讀取HID設(shè)備功能;

          (3)具體實現(xiàn)Get_KeyID和Set_KeyID子函數(shù);

          BOOL CUsbKey::GetKeyID() //Get_KeyID子程序

          {...

          result=HidD_GetFeature(HidDevice, ReadBuffer,0x09);

          //調(diào)用此函數(shù),獲取從端點1發(fā)來的8字節(jié)KeyID;

          for(tmpInt=0;tmpInt

          KeyID_Get[tmpInt]=ReadBuffer[tmpInt+1];

          return TRUE;

          }

          BOOL CUsbKey::SetKeyID() // Set_KeyID子程序

          { int i;

          long result;

          int DataBuffer[16];

          WriteBuffer[0]=0; //寫緩沖區(qū)首字節(jié)清0,作為Set_Feature函數(shù)的要求

          char *c; //獲得對話框內(nèi)輸入8字節(jié)新KeyID字符串的指針

          c=(char *)(LPCSTR)str_KeyIDSet;

          for (i=0;i

          DataBuffer[i]=*c++;

          …… //此處省略了對輸入的8個字節(jié)的KeyID的16進(jìn)制檢查代碼

          for(i=0;i8;i++)

          WriteBuffer[i+1]=DataBuffer[2*i]+DataBuffer[2*i+1];

          result=HidD_SetFeature(HidDevice,WriteBuffer, 0x09);

          return TRUE;

          }

          (4)程序運行結(jié)果。

          編譯連接之后,最終會生成可執(zhí)行文件KEYDEMO.exe。執(zhí)行它即可SK通信,實現(xiàn)各種功能。


          上一頁 1 2 3 4 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();