国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      Usb設(shè)備識別主機操作系統(tǒng)的方法

      文檔序號:6605024閱讀:196來源:國知局
      專利名稱:Usb設(shè)備識別主機操作系統(tǒng)的方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種信息或信號在輸入/輸出設(shè)備或中央處理機之間互聯(lián)或傳送的 方法,屬于信息安全領(lǐng)域,具體涉及一種USB設(shè)備識別主機操作系統(tǒng)的方法。
      背景技術(shù)
      USB協(xié)議技術(shù)是主機與外部設(shè)備連接的串行總線標(biāo)準(zhǔn),在主機(例如,個人計算 機、個人數(shù)字助理以及移動電腦等)上使用十分廣泛,支持熱插拔和即插即用,并支持總線 供電,鼠標(biāo)、鍵盤、游戲手柄、掃描儀、數(shù)碼相機、打印機、硬盤、安全設(shè)備、光驅(qū)和網(wǎng)卡等幾乎 所有的外圍設(shè)備都可以通過運行USB接口與主機相連并進行通信,USB接口已經(jīng)成為目前 大多數(shù)主機外設(shè)與計算機相連的缺省接口。在操作系統(tǒng)平臺支持方面,Windows系統(tǒng)平臺中Windows 98、Windows 2000、 Windows XP及Windows Vista,Windows 7等,蘋果操作系統(tǒng),Linux系統(tǒng)都提供了對USB接 口的支持。而隨著USB接口計算機外圍設(shè)備的增多,要求計算機對USB接口的支持能力也 越高,同時也要求USB設(shè)備能夠很好的識別主機操作系統(tǒng)。

      發(fā)明內(nèi)容
      針對上述問題,現(xiàn)提出一種USB設(shè)備識別主機操作系統(tǒng)的方法,具體技術(shù)方案如 下一種USB設(shè)備識別主機操作系統(tǒng)的方法,所述方法包括步驟A、USB設(shè)備上電,并進行初始化;步驟B、所述USB設(shè)備判斷接收到的第一個setup包是否是第一預(yù)設(shè)命令,如果是 所述第一預(yù)設(shè)命令,執(zhí)行步驟C,如果不是所述第一預(yù)設(shè)命令,執(zhí)行步驟D ;步驟C、所述USB設(shè)備判斷所述第一預(yù)設(shè)命令中的第七個字節(jié)是否是第二預(yù)設(shè)值, 如果是,則將操作系統(tǒng)標(biāo)識置為第一預(yù)設(shè)標(biāo)識,執(zhí)行步驟F,否則,執(zhí)行步驟E ;步驟D、所述USB設(shè)備判斷所述第一個setup包是否是第二預(yù)設(shè)命令,如果是所述 第二預(yù)設(shè)命令,則將操作系統(tǒng)標(biāo)識置為第二預(yù)設(shè)標(biāo)識,執(zhí)行步驟F,否則,執(zhí)行步驟E ;步驟E、所述USB設(shè)備按照默認(rèn)操作系統(tǒng)標(biāo)識與主機進行信息交互,直到接收到最 后一個setup包,并判斷所述最后一個setup包是否是第三預(yù)設(shè)命令,如果是所述第三預(yù)設(shè) 命令,則將操作系統(tǒng)標(biāo)識置為第三預(yù)設(shè)標(biāo)識,如果不是所述第三預(yù)設(shè)命令,則將操作系統(tǒng)標(biāo) 識置為第四預(yù)設(shè)標(biāo)識;步驟F、所述USB設(shè)備根據(jù)當(dāng)前操作系統(tǒng)標(biāo)識與所述主機進行信息交互,所述USB 設(shè)備與所述主機建立通信,并等待接收所述主機下發(fā)的指令。所述USB設(shè)備進行初始化包括將上電標(biāo)識初始化為第一預(yù)設(shè)值,將操作系統(tǒng)標(biāo) 識初始化為默認(rèn)標(biāo)識。所述步驟F還包括,所述USB設(shè)備判斷當(dāng)前操作系統(tǒng)標(biāo)識是否與所述默認(rèn)標(biāo)識相 同,如果相同,則所述USB設(shè)備與主機建立通信,并等待接收所述主機下發(fā)的指令;如果不相同,所述USB設(shè)備進行軟掉電處理,并將所述上電標(biāo)識置為第三預(yù)設(shè)值,執(zhí)行步驟A。在所述步驟A之后,所述方法還包括判斷所述USB設(shè)備是否是首次上電,如果是 首次上電,則執(zhí)行步驟B ;如果不是,所述USB設(shè)備執(zhí)行步驟F。判斷所述USB設(shè)備是否是首次上電具體為判斷上電標(biāo)識是否是第一預(yù)設(shè)值,如 果是,則所述USB設(shè)備是首次上電,如果不是,則所述USB設(shè)備不是首次上電;所述第一預(yù)設(shè)命令為取設(shè)備描述符命令。所述USB設(shè)備判斷第一個setup包是否是第一預(yù)設(shè)命令具體為所述USB設(shè)備判 斷所述第一個setup包是否是以十六進制數(shù)8006開始的,如果是,則所述第一個setup包 是所述第一預(yù)設(shè)命令,否則,不是所述第一預(yù)設(shè)命令。所述第二預(yù)設(shè)值為十六進制數(shù)0x08。所述第二預(yù)設(shè)命令為設(shè)置設(shè)備地址命令。所述USB設(shè)備判斷所述第一個setup數(shù)據(jù)包是否是第二預(yù)設(shè)命令具體為所述 USB設(shè)備判斷所述第一個setup包是否是以十六進制數(shù)00 05開始的,如果是,則所述第一 個setup包為所述第二預(yù)設(shè)命令,否則,不是所述第二預(yù)設(shè)命令。所述最后一個setup包是指所述USB設(shè)備在接收完取描述符信息之后接收到的第 一條指令;所述取描述符信息包括取設(shè)備描述符命令、取接口描述符命令、取端點描述符命 令、取配置描述符命令。所述第三預(yù)設(shè)命令為選擇配置指令。所述USB設(shè)備判斷最后一個setup包是否是第三預(yù)設(shè)命令具體為所述USB設(shè)備 判斷所述最后一個setup包是否是以十六進制數(shù)00 09開始的,如果是,則所述最后一個 setup包是所述第三預(yù)設(shè)命令,否則,不是所述第三預(yù)設(shè)命令。USB設(shè)備通過對主機下發(fā)的指令進行分析,可以確定主機操作系統(tǒng),并在確定主機 操作系統(tǒng)后,有針對性的向主機返回相應(yīng)的數(shù)據(jù),使得主機能夠準(zhǔn)確的識別USB設(shè)備。所述方法還包括所述第一預(yù)設(shè)標(biāo)識對應(yīng)第一操作系統(tǒng),第二預(yù)設(shè)標(biāo)識對應(yīng)第二 操作系統(tǒng),第三預(yù)設(shè)標(biāo)識對應(yīng)第三操作系統(tǒng),第四預(yù)設(shè)標(biāo)識對應(yīng)第四操作系統(tǒng)。所述第一操作系統(tǒng)為蘋果操作系統(tǒng),所述第二操作系統(tǒng)為LinuX2. 4內(nèi)核系統(tǒng)或 Linux2. 6. 10及Linux2. 6. 10之前的內(nèi)核系統(tǒng),所述第三操作系統(tǒng)為Linux2. 6. 10之后的內(nèi) 核系統(tǒng),第四操作系統(tǒng)為Windows操作系統(tǒng)。有益效果USB設(shè)備通過對主機下發(fā)的指令進行分析,可以確定主機操作系統(tǒng),并 在確定主機操作系統(tǒng)后,有針對性的向主機返回相應(yīng)的數(shù)據(jù),使得主機能夠準(zhǔn)確的識別USB 設(shè)備。


      圖1為本發(fā)明實施例提供的一種USB設(shè)備識別主機操作系統(tǒng)的方法流程圖;
      具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方 式作進一步地詳細(xì)描述。
      在進行具體說明之前,對USB設(shè)備與主機之間的通信原理進行簡單的說明,如下USB設(shè)備與主機之間的通信是由主機發(fā)送命令給USB設(shè)備,USB設(shè)備對接收到的 命令進行響應(yīng),USB設(shè)備與主機之間通信的基本單位是“包”,其中,“包”的分類主要有令 牌包、數(shù)據(jù)包和握手包,由PID來決定包的具體類型。其中,令牌包的格式為SYNC+PID+ADDR+ENDP+CRC ;數(shù)據(jù)包分為DATAO包和DATAl 包,在USB設(shè)備返回的數(shù)據(jù)長度超過相應(yīng)端點的最大輸出數(shù)據(jù)包長度時,需要將返回的數(shù) 據(jù)分批發(fā)送,一般情況下,DATAO包和DATAl包交替發(fā)送;握手包的格式為SYNC+PID。其中,USB設(shè)備通過端點來收發(fā)數(shù)據(jù)。例如PID=SETUP ADDR 00 ENDP 00 CRC5 02 idle 3PID=DATAO data :80 06 00 01 00 00 40 00 CRC16 :94dd idle :7PID :ACK idle :2ela上述命令說明,該包為SETUP包,數(shù)據(jù)內(nèi)容是80 06 00 01 00 0040 00,握手包為 ACK ;其中,SETUP包由主機下發(fā),USB設(shè)備接收到該SETUP包后向主機返回應(yīng)答信息,例如PID :IN ADDR :00 ENDP :00 CRC5 :02 idle :7PID =DATAl data :12 01 10 01 00 00 00 08 CRC16 :7711 idle :7PID :ACK idle :2el6PID :0UT ADDR :00 ENDP :00 CRC5 :02 idle :3PID DATAl data :CRC16 :0000 idle :7PID :ACK idle :2e5aUSB設(shè)備向主機返回的應(yīng)答數(shù)據(jù)是12 01 10 01 00 00 00 08,需要說明的是, USB設(shè)備在接收到主機下發(fā)的IN或OUT的令牌包后,向主機返回應(yīng)答數(shù)據(jù);這樣,USB設(shè)備與主機之間便完成了一次信息交互,而每一次的信息交互,都是由 接收到主機下發(fā)的SETUP包開始的。實施例1本實施例提供了一種USB設(shè)備識別主機操作系統(tǒng)的方法,具體地,USB設(shè)備通過分 析所接收到的命令來判斷主機操作系統(tǒng)的類型,然后,針對不同的主機操作系統(tǒng)向主機返 回相應(yīng)的信息,以便主機能夠更好的識別和操作USB設(shè)備。參見圖1,本實施例提供了一種USB設(shè)備識別主機操作系統(tǒng)的方法,具體內(nèi)容如 下101、USB設(shè)備上電,并進行初始化;其中,USB設(shè)備具體包括安全設(shè)備(如USB Key)、讀卡器、存儲設(shè)備(如U盤)及 鍵盤、鼠標(biāo)等計算機外圍設(shè)備;具體地,USB設(shè)備通過USB總線連接到主機,并從主機Vcc (電源電壓或工作電壓) 處獲取工作電壓;初始化操作具體包括USB設(shè)備將上電標(biāo)識、操作系統(tǒng)標(biāo)識初始化為默認(rèn)標(biāo)識;具體地,將上電標(biāo)識初始化為第一預(yù)設(shè)值,將操作系統(tǒng)標(biāo)識初始化為默認(rèn)標(biāo)識,本 實施例中該默認(rèn)標(biāo)識為第四預(yù)設(shè)標(biāo)識;其中,第一預(yù)設(shè)值及第四預(yù)設(shè)標(biāo)識為自定義的,本實施例中第一預(yù)設(shè)值為0,第四預(yù)設(shè)標(biāo)識為4 ;需要說明的是,主機操作系統(tǒng)時刻在監(jiān)控USB設(shè)備的插拔狀態(tài),當(dāng)主機操作系統(tǒng) 檢測到有USB設(shè)備連接到總線時,對USB設(shè)備進行枚舉,在枚舉過程中,USB設(shè)備接收主機 下發(fā)的一系列setup包,具體包括“取設(shè)備描述符”、“設(shè)置設(shè)備地址”、“取配置描述符”、“取 端點描述符”、“選擇配置”等,USB設(shè)備逐一對其做出響應(yīng),當(dāng)USB設(shè)備將描述符、端點、配置 等返回給主機后,主機和USB設(shè)備就可按照商定的協(xié)議和端點進行通信了,具體的如102至 117所述。102、USB設(shè)備總線復(fù)位;具體地,USB設(shè)備接收到主機下發(fā)的總線復(fù)位命令后,進行總線復(fù)位;需要說明的是,USB設(shè)備總線復(fù)位后,該USB設(shè)備的默認(rèn)地址0被使能,則接下來 USB設(shè)備與主機之間便通過地址0來傳輸命令及數(shù)據(jù)。103、USB設(shè)備判斷自身是否是首次上電,如果不是,執(zhí)行104,如果是,執(zhí)行105 ;判斷USB設(shè)備是否是首次上電具體為判斷上電標(biāo)識位是否為第一預(yù)設(shè)值,如果 是,則USB設(shè)備為首次上電,否則,不是首次上電;其中,上電標(biāo)識位是USB設(shè)備中的一個硬件標(biāo)識位,能夠根據(jù)上電情況進行數(shù)值 轉(zhuǎn)換;104, USB設(shè)備按照當(dāng)前設(shè)置的操作系統(tǒng)標(biāo)識完成枚舉操作,執(zhí)行117 ;需要說明的是,USB設(shè)備在按照當(dāng)前設(shè)置的操作系統(tǒng)標(biāo)識完成枚舉操作的過程根 據(jù)USB設(shè)備類型的不同,進行的枚舉操作也不盡相同,如當(dāng)USB設(shè)備自身是CCID設(shè)備時, USB設(shè)備在枚舉的過程中進行的操作包括向主機返回設(shè)備描述符、接口描述符、端點描述符 等信息,如當(dāng)USB設(shè)備自身是HID設(shè)備時,USB設(shè)備在枚舉的過程中進行的操作包括像主機 返回設(shè)備描述符、描述符集合、字符串描述符、端口描述符、配置描述符等信息。105、USB設(shè)備接收到主機下發(fā)的第一個setup包時,判斷接收到的setup包是否 是第一預(yù)設(shè)命令,如果是,執(zhí)行106,如果不是,執(zhí)行109 ;具體地,第一預(yù)設(shè)命令為取設(shè)備描述符命令;則判斷第一個setup包是否是取設(shè)備描述符命令具體為判斷第一個setup包是 否是以十六進制數(shù)8006開始的命令,如果是,則第一個setup包是取設(shè)備描述符命令,否 則,不是取設(shè)備描述符命令。106、USB設(shè)備判斷該第一預(yù)設(shè)命令中的第七個字節(jié)數(shù)據(jù)是否為第二預(yù)設(shè)值,如果 是,執(zhí)行107,如果不是,執(zhí)行112 ;本實施例中,第二預(yù)設(shè)值為十六進制數(shù)0x08 ;107、USB設(shè)備認(rèn)定主機操作系統(tǒng)為第一操作系統(tǒng),并將操作系統(tǒng)標(biāo)識置為第一預(yù) 設(shè)標(biāo)識;具體地,第一操作系統(tǒng)為蘋果系統(tǒng)Mac os,具體包括Mac os χ ;例如,主機操作系統(tǒng)為Mac os χ時,USB設(shè)備接收到的第一個setup包為PID=SETUP ADDR 00 ENDP 00 CRC5 02 idle 3PID=DATAO data :80 06 00 01 00 00 08 00 CRC16 :94 eb idle :7PID :ACK idle :3a其中,data :80 06 00 01 00 00 08 00為十六進制數(shù),0x01表示設(shè)備描述符,第七個字節(jié)0x08表示取8個字節(jié)的設(shè)備描述符,USB設(shè)備接收到的第一個setup包是80 06 00 01 00 00 08 00,則說明主機操作系統(tǒng)是第一操作系統(tǒng);具體地,第一預(yù)設(shè)標(biāo)識是自定義的,本實施例中第一預(yù)設(shè)標(biāo)識為1 ;108, USB設(shè)備向主機返回設(shè)備描述符,聲明自身是CCID設(shè)備,執(zhí)行117 ;例如,USB設(shè)備返回的設(shè)備描述符信息為09 04 00 00 02 01 0000 00,其中, 0x01標(biāo)識設(shè)備類型為CCID設(shè)備;需要說明的是,USB設(shè)備向主機返回設(shè)備描述符后,還將完成剩余的枚舉操作,如 向主機返回接口描述符、端點描述符等信息,當(dāng)枚舉操作完成后,USB設(shè)備執(zhí)行117 ;還需要說明的是,上述所說的設(shè)備描述符、接口描述符、端點描述符等信息并不是 一定要全部返回給主機的,USB設(shè)備可能只是返回其中的一項或多項信息給主機,這是由 USB設(shè)備自身設(shè)置所決定的;109、USB設(shè)備判斷所接收到的第一個setup包是否是第二預(yù)設(shè)命令,如果是第二 預(yù)設(shè)命令,執(zhí)行110,如果不是,執(zhí)行112 ;具體地,第二預(yù)設(shè)命令為設(shè)置設(shè)備地址命令;判斷接收到的第一個setup包是否是設(shè)置設(shè)備地址命令具體為判斷第一個 setup包的數(shù)據(jù)是否是以0005開始的,如果是,則接收到的setup包是設(shè)置設(shè)備地址命令;110、USB設(shè)備認(rèn)定主機操作系統(tǒng)為第二操作系統(tǒng),并將操作系統(tǒng)標(biāo)識置為第二預(yù) 設(shè)標(biāo)識;具體地,第二操作系統(tǒng)為LinuX2. 4系統(tǒng)或LinuX2. 6早期內(nèi)核系統(tǒng);其中,Linux2.6 早期內(nèi)核系統(tǒng)包括Linux2. 6. ll、Linux2. 6. 10 及 Linux2. 6. 10之 前版本的Linux2. 6內(nèi)核系統(tǒng);例如,主機操作系統(tǒng)為第二操作系統(tǒng)時,USB設(shè)備接收到的第一個setup包為PID=SETUP ADDR 00 ENDP 00 CRC5 02 idle 3PID=DATAO data :00 05 04 00 00 00 00 00 CRC 16 :70 eb idle :7PID :ACK idle :2f其中,data :00 05 04 00 00 00 00 00為十六進制數(shù),為USB設(shè)備分配地址,新分 配到的地址是0x04,而USB設(shè)備在接收到上述命令后,向主機返回一個長度為0的空數(shù)據(jù) 包;具體地,第二預(yù)設(shè)標(biāo)識是自定義的,本實施例中第二預(yù)設(shè)標(biāo)識為2 ;111、USB設(shè)備向主機返回接口描述符,該接口描述符中不含有對自身可用端點數(shù) 的描述信息,執(zhí)行117;具體地,USB設(shè)備在認(rèn)定主機操作系統(tǒng)為第二操作系統(tǒng)時,USB設(shè)備向主機返回的 接口描述符中并不向主機報告額外的端點;例如,在主機操作系統(tǒng)是第二操作系統(tǒng)時,USB設(shè)備接收到的獲取接口描述符命令 為PID=SETUP ADDR 04 ENDP 00 CRC5 05 idle 3PID=DATAO data :80 06 00 04 00 00 09 00 CRC16 :04 ae idle :7PID :ACK idle :31其中,data :80 06 00 04 00 00 09 00為十六進制數(shù),0x04為獲取USB設(shè)備的接口描述符,0x09表示獲取9字節(jié)的接口描述符;USB設(shè)備返回的接口描述符為PID :IN ADDR :04 ENDP :00 CRC5 :05 idle :7PID DATAl data :09 04 00 00 02 03 00 00 CRC16 :a20a idle :7PID :ACK idle :2cPID :IN ADDR :04 ENDP :00 CRC5 :05 idle :6PID DATAO data :00 CRC16 :7581 idle :7PID :ACK idle :30其中,USB設(shè)備返回的接口描述符為09 04 00 00 00 03 00 00 00,其中第五個 字節(jié)0x00,告知主機該USB設(shè)備沒有額外的端點,在這種情況下,USB設(shè)備與主機之間使用 默認(rèn)的端點0來進行數(shù)據(jù)通信;需要說明的是,USB設(shè)備向主機返回接口描述符后,還將完成剩余的枚舉操作,當(dāng) 枚舉操作完成后,USB設(shè)備執(zhí)行117。112、USB設(shè)備按照當(dāng)前默認(rèn)的操作系統(tǒng)標(biāo)識來完成枚舉操作,并緩存最后一個 setup 包;具體地,該最后一個setup包是指USB設(shè)備在接收完主機下發(fā)的取描述符信息之 后的第一條指令。具體地,主機下發(fā)的取描述符信息包括取設(shè)備描述符命令、取接口描述符命令、 取端點描述符命令、取配置描述符命令等。具體地,如果當(dāng)前默認(rèn)的操作系統(tǒng)標(biāo)識對應(yīng)的是Windows操作系統(tǒng),USB設(shè)備在完 成枚舉操作時向系統(tǒng)聲明自身為HID設(shè)備;如果當(dāng)前默認(rèn)的操作系統(tǒng)標(biāo)識對應(yīng)的是Linux操作系統(tǒng),USB設(shè)備在完成枚舉操 作時向系統(tǒng)聲明自身為自定義USB設(shè)備;如果當(dāng)前默認(rèn)的操作系統(tǒng)標(biāo)識對應(yīng)的是MACOSX操作系統(tǒng),USB設(shè)備在完成枚舉操 作時向系統(tǒng)聲明自身為CCID設(shè)備;以上只是舉例,也可以聲明為其他類型的設(shè)備,如USB光盤,USB Mass storage等。本實施例中,默認(rèn)的操作系統(tǒng)是第四操作系統(tǒng),所以USB設(shè)備在本步驟中將會向 第四操作系統(tǒng)返回相應(yīng)的信息。113、USB設(shè)備判斷接收到的最后一個setup包是否是第三預(yù)設(shè)命令,如果是,則執(zhí) 行114,否則,執(zhí)行116 ;具體地,第三預(yù)設(shè)命令是選擇配置指令。判斷接收到的最后一個setup包是否是選擇配置指令具體為判斷該指令是否是 以00 09開始的,如果是,則該指令是選擇配置指令;例如,USB設(shè)備接收到的最后一個setup包為PID=SETUP ADDR 02 ENDP 00 CRC5 15 idle 3PID=DATAO data :00 09 01 00 00 00 00 00 CRC16 :2527 idle :7PID :ACK idle :2ela其中,data:00 09 01 00 00 00 00 00 為選擇配置指令;114、USB設(shè)備認(rèn)定主機操作系統(tǒng)為第三操作系統(tǒng),并將操作系統(tǒng)標(biāo)識置為第三預(yù)設(shè)標(biāo)識;具體地,第三操作系統(tǒng)為Linux2. 6后期內(nèi)核系統(tǒng),包括Linux2. 6. 18、Linux 2. 6. 28 ;具體地,第三預(yù)設(shè)標(biāo)識是自定義數(shù)值,本實施例中第三預(yù)設(shè)標(biāo)識為3 ;115、USB設(shè)備進行軟掉電處理,并將上電標(biāo)識位置為第三預(yù)設(shè)值,返回102 ;在對軟掉電處理進行說明之前,需要知道是,USB設(shè)備通過改變主機Vcc (電源電 壓或工作電壓)的上拉電阻狀態(tài)來告知主機自身的插拔狀態(tài),USB設(shè)備內(nèi)部集成有上拉電 阻,默認(rèn)狀態(tài)下是不與Vcc相連的,當(dāng)USB設(shè)備與主機建立連接時,USB內(nèi)部的上拉電阻連 接到Vcc上,這樣主機便可以通過檢測Vcc上的上拉電阻的變化來確定是否有USB設(shè)備連 入了 ;軟掉電處理具體是指USB設(shè)備接收主機下發(fā)的power off命令,斷開內(nèi)部上拉電 阻與Vcc的連接,這樣,主機操作系統(tǒng)將會監(jiān)控到USB設(shè)備是拔出狀態(tài),但USB設(shè)備是與Vcc 相連的,依然可以從Vcc處獲取電源,USB設(shè)備依然是處于上電狀態(tài)的,斷開預(yù)定時間后(極 短的時間),USB設(shè)備接收到主機下發(fā)的power on命令,USB設(shè)備內(nèi)部的上拉電阻連到Vcc, 主機操作系統(tǒng)將再次監(jiān)控到USB設(shè)備的插入,重新開始進行枚舉操作,即USB設(shè)備返回執(zhí)行 102 ;具體地,第三預(yù)設(shè)值為自定義數(shù)值,本實施例中第三預(yù)設(shè)值為3 ;這里,還需要說明的是,USB設(shè)備在判斷出主機操作系統(tǒng)是第三操作系統(tǒng)時,需要 進行軟掉電處理,重新進行枚舉操作,這是因為USB設(shè)備在判斷出主機操作系統(tǒng)是第三操 作系統(tǒng)之前已經(jīng)完成了枚舉,并且是按照默認(rèn)操作系統(tǒng),即第四操作系統(tǒng)來返回的描述符 信息,而在判斷出主機操作系統(tǒng)是第三操作系統(tǒng)時,前面已經(jīng)返回的描述符信息是錯誤的, 則就需要進行軟掉電,重新按照主機操作系統(tǒng)是第三操作系統(tǒng)來返回描述符信息;116、USB設(shè)備認(rèn)定主機操作系統(tǒng)為第四操作系統(tǒng),并將操作系統(tǒng)標(biāo)識的值置為第 四預(yù)設(shè)標(biāo)識;具體地,第四操作系統(tǒng)為Windows操作系統(tǒng),包括Windows 98、Windows 2000、 Windows XP、Windows Vista 或 Windows 7 ;需要說明的是,在主機是第四操作系統(tǒng)下,USB設(shè)備接收到的最后一個setup包是 配置命令,例如80 06 02 03 09 04 ff 00,該命令是指獲取索引為2個字符串描述符;具體地,第四預(yù)設(shè)標(biāo)識是自定義數(shù)值,本實施例中第四預(yù)設(shè)標(biāo)識是4 ;這里,需要說明的是,USB設(shè)備在判斷出主機操作系統(tǒng)是第四操作系統(tǒng)時,并沒有 進行軟掉電處理,而是完成了枚舉操作,等待從主機接收APDU指令,這是因為,USB設(shè)備是 將第四操作系統(tǒng)作為默認(rèn)的操作系統(tǒng),則在枚舉過程中,USB設(shè)備本身就是按照第四操作系 統(tǒng)來進行枚舉操作的,向主機返回的描述符信息是正確的,故不用再次進行枚舉操作了 ;117、USB設(shè)備與主機建立數(shù)據(jù)通信,等待接收主機下發(fā)的APDU指令;需要說明的是,當(dāng)步驟101中,如果USB設(shè)備將操作系統(tǒng)標(biāo)識初始化為第三預(yù)設(shè) 標(biāo)識,則USB設(shè)備將在116中進行軟掉電處理,并將上電標(biāo)識置為第三預(yù)設(shè)值,返回102 ;則 在115中就不需要進行軟掉電處理了 ;即,USB設(shè)備在執(zhí)行117之前,還做了一個判斷,即判 斷當(dāng)前操作系統(tǒng)標(biāo)識是否與默認(rèn)標(biāo)識相同,如果相同,按照當(dāng)前操作系統(tǒng)標(biāo)識向主機返回 應(yīng)答信息,執(zhí)行117,如果不相同,則USB設(shè)備進行軟掉電處理,并將上電標(biāo)識置為第三預(yù)設(shè)值,執(zhí)行102。需要說明的是,如果USB設(shè)備認(rèn)定主機操作系統(tǒng)是第一操作系統(tǒng)時,在接收到主 機下發(fā)的接口描述符后,根據(jù)自身的設(shè)置情況向主機返回自身真實可用的端點數(shù);例如,USB設(shè)備自身有兩個可用的端點,則向主機返回接口描述符09 04 00 00 02 03 00 00 00,第五個字節(jié)0x02,告知主機自身有兩個可用的端點;再例如,USB設(shè)備自身沒有額外可用的端點,則向主機返回接口描述符09 04 000000 03 00 00 00,第五個字節(jié)0x00,告知主機自身沒有額外可用的端點,此時,USB設(shè)備 與主機之間通過默認(rèn)端點0來進行數(shù)據(jù)通信;如果USB設(shè)備在認(rèn)定主機是第三操作系統(tǒng)的情況下,向主機返回的接口描述符中 不含有端點信息,例如,返回的接口描述符為0904 00 00 00 03 00 00 00 ;還需要說明的是,如果USB設(shè)備自身是光盤設(shè)備,則USB設(shè)備在于主機進行通信的 過程中,如果USB設(shè)備接收到主機下發(fā)讀取光盤內(nèi)容的指令時,USB設(shè)備將會根據(jù)所認(rèn)定的 操作系統(tǒng)類型,向主機返回不同的數(shù)據(jù);其中,USB設(shè)備接收到的讀取光盤內(nèi)容的指令為標(biāo)準(zhǔn)的SISC指令,具體為55 53 42 43 b0 94 f0 85 00 08 00 00 080 00 Oa 28 00 00 0000 11 00 00 01 00 00 00 00 00 00 00 ;如果認(rèn)定主機操作系統(tǒng)是第一操作系統(tǒng),USB設(shè)備在接收到上述指令后,則向主 機返回數(shù)據(jù) 02 43 44 30 30 31 01 00 00 57 00 69 006e 00 33 00 32 00 20 00 20 00 20 00 20 00 20 00 20 00 20 ;如果認(rèn)定主機操作系統(tǒng)為第二或第三操作系統(tǒng),USB設(shè)備在接收到上述指令后,則 向主機返回 03 43 44 30 30 31 01 00 00 57 00 69 006e 00 33 00 32 00 20 00 20 00 20 00 20 00 20 00 20 00 20 ;如果認(rèn)定操作系統(tǒng)為第四操作系統(tǒng),USB設(shè)備在接收到上述指令后,則向主機返回0143 44 30 30 31 01 00 00 57 00 69 00 6e 00 33 0032 00 20 00 20 00 20 00 20 00 20 00 20 00 20 ;USB設(shè)備通過對主機下發(fā)的指令進行分析,可以確定主機操作系統(tǒng),并在確定主機 操作系統(tǒng)后,有針對性的向主機返回相應(yīng)的數(shù)據(jù),使得主機能夠準(zhǔn)確的識別USB設(shè)備。以上僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則 之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
      權(quán)利要求
      1.一種USB設(shè)備識別主機操作系統(tǒng)的方法,其特征在于,所述方法包括步驟A、USB設(shè)備上電,并進行初始化;步驟B、所述USB設(shè)備判斷接收到的第一個setup包是否是第一預(yù)設(shè)命令,如果是所述 第一預(yù)設(shè)命令,執(zhí)行步驟C,如果不是所述第一預(yù)設(shè)命令,執(zhí)行步驟D ;步驟C、所述USB設(shè)備判斷所述第一預(yù)設(shè)命令中的第七個字節(jié)是否是第二預(yù)設(shè)值,如果 是,則將操作系統(tǒng)標(biāo)識置為第一預(yù)設(shè)標(biāo)識,執(zhí)行步驟F,否則,執(zhí)行步驟E ;步驟D、所述USB設(shè)備判斷所述第一個setup包是否是第二預(yù)設(shè)命令,如果是所述第二 預(yù)設(shè)命令,則將操作系統(tǒng)標(biāo)識置為第二預(yù)設(shè)標(biāo)識,執(zhí)行步驟F,否則,執(zhí)行步驟E ;步驟E、所述USB設(shè)備按照默認(rèn)操作系統(tǒng)標(biāo)識與主機進行信息交互,直到接收到最后一 個setup包,并判斷所述最后一個setup包是否是第三預(yù)設(shè)命令,如果是所述第三預(yù)設(shè)命 令,則將操作系統(tǒng)標(biāo)識置為第三預(yù)設(shè)標(biāo)識,如果不是所述第三預(yù)設(shè)命令,則將操作系統(tǒng)標(biāo)識 置為第四預(yù)設(shè)標(biāo)識;步驟F、所述USB設(shè)備根據(jù)當(dāng)前操作系統(tǒng)標(biāo)識與所述主機進行信息交互,所述USB設(shè)備 與所述主機建立通信,并等待接收所述主機下發(fā)的指令。
      2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述USB設(shè)備進行初始化包括將上電標(biāo) 識初始化為第一預(yù)設(shè)值,將操作系統(tǒng)標(biāo)識初始化為默認(rèn)標(biāo)識。
      3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟F還包括,所述USB設(shè)備判斷當(dāng) 前操作系統(tǒng)標(biāo)識是否與所述默認(rèn)標(biāo)識相同,如果相同,則所述USB設(shè)備與主機建立通信,并 等待接收所述主機下發(fā)的指令;如果不相同,所述USB設(shè)備進行軟掉電處理,并將所述上電 標(biāo)識置為第三預(yù)設(shè)值,執(zhí)行步驟A。
      4.根據(jù)權(quán)利要求3所述的方法,其特征在于,在所述步驟A之后,所述方法還包括判 斷所述USB設(shè)備是否是首次上電,如果是首次上電,則執(zhí)行步驟B ;如果不是,所述USB設(shè)備 執(zhí)行步驟F。
      5.根據(jù)權(quán)利要求4所述的方法,其特征在于,判斷所述USB設(shè)備是否是首次上電具體 為判斷上電標(biāo)識是否是第一預(yù)設(shè)值,如果是,則所述USB設(shè)備是首次上電,如果不是,則所 述USB設(shè)備不是首次上電;
      6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一預(yù)設(shè)命令為取設(shè)備描述符命令。
      7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述USB設(shè)備判斷第一個setup包是否是 第一預(yù)設(shè)命令具體為所述USB設(shè)備判斷所述第一個setup包是否是以十六進制數(shù)80 06 開始的,如果是,則所述第一個setup包是所述第一預(yù)設(shè)命令,否則,不是所述第一預(yù)設(shè)命 令。
      8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第二預(yù)設(shè)值為十六進制數(shù)0x08。
      9.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第二預(yù)設(shè)命令為設(shè)置設(shè)備地址命令。
      10.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述USB設(shè)備判斷所述第一個setup數(shù) 據(jù)包是否是第二預(yù)設(shè)命令具體為所述USB設(shè)備判斷所述第一個setup包是否是以十六進 制數(shù)00 05開始的,如果是,則所述第一個setup包為所述第二預(yù)設(shè)命令,否則,不是所述第 二預(yù)設(shè)命令。
      11.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述最后一個setup包是指所述USB設(shè) 備在接收完取描述符信息之后接收到的第一條指令。
      12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述取描述符信息包括取設(shè)備描述符 命令、取接口描述符命令、取端點描述符命令、取配置描述符命令。
      13.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第三預(yù)設(shè)命令為選擇配置指令。
      14.根據(jù)權(quán)利13所述的方法,其特征在于,所述USB設(shè)備判斷最后一個setup包是否 是第三預(yù)設(shè)命令具體為所述USB設(shè)備判斷所述最后一個setup包是否是以十六進制數(shù)00 09開始的,如果是,則所述最后一個setup包是所述第三預(yù)設(shè)命令,否則,不是所述第三預(yù) 設(shè)命令。
      15.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括所述第一預(yù)設(shè)標(biāo)識對 應(yīng)第一操作系統(tǒng),第二預(yù)設(shè)標(biāo)識對應(yīng)第二操作系統(tǒng),第三預(yù)設(shè)標(biāo)識對應(yīng)第三操作系統(tǒng),第四 預(yù)設(shè)標(biāo)識對應(yīng)第四操作系統(tǒng)。
      16.根據(jù)權(quán)利要求15的方法,其特征在于,所述第一操作系統(tǒng)為蘋果操作系統(tǒng),所述第 二操作系統(tǒng)為Linux2. 4內(nèi)核系統(tǒng)或Linux2. 6. 10及Linux2. 6. 10之前的內(nèi)核系統(tǒng),所述第 三操作系統(tǒng)為Linux2. 6. 10之后的內(nèi)核系統(tǒng),第四操作系統(tǒng)為Windows操作系統(tǒng)。
      全文摘要
      本發(fā)明公開了一種USB設(shè)備識別主機操作系統(tǒng)的方法,屬于信息安全領(lǐng)域。方法包括A、USB設(shè)備上電并初始化;B、判斷第一個setup包是否是第一預(yù)設(shè)命令,是執(zhí)行C,不是執(zhí)行D;C、判斷第一預(yù)設(shè)命令中的第七個字節(jié)是否是第二預(yù)設(shè)值,是將操作系統(tǒng)標(biāo)識置為第一預(yù)設(shè)標(biāo)識執(zhí)行F,否則執(zhí)行E;D、判斷第一個setup包是否是第二預(yù)設(shè)命令,是將操作系統(tǒng)標(biāo)識置為第二預(yù)設(shè)標(biāo)識,執(zhí)行F否則執(zhí)行E;E、按照默認(rèn)操作系統(tǒng)標(biāo)識與主機進行信息交互,直到接收到最后一個setup包,并判斷最后一個setup包是否是第三預(yù)設(shè)命令,是則將操作系統(tǒng)標(biāo)識置為第三預(yù)設(shè)標(biāo)識,不是,則將操作系統(tǒng)標(biāo)識置為第四預(yù)設(shè)標(biāo)識;F、根據(jù)當(dāng)前操作系統(tǒng)標(biāo)識與主機進行信息交互,之后并等待接收主機下發(fā)的指令。
      文檔編號G06F13/42GK102043751SQ20101021396
      公開日2011年5月4日 申請日期2010年6月29日 優(yōu)先權(quán)日2010年6月29日
      發(fā)明者于華章, 陸舟 申請人:北京飛天誠信科技有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1