本發(fā)明涉及對(duì)系統(tǒng)資源對(duì)象的訪問權(quán)限技術(shù)領(lǐng)域,具體地說是一種WINDOWS系統(tǒng)受限用戶下訪問智能密碼設(shè)備的方法。
背景技術(shù):
動(dòng)態(tài)鏈接庫(kù)(Dll),是Windows操作系統(tǒng)中,實(shí)現(xiàn)共享函數(shù)庫(kù)的一種方式,是Windows操作系統(tǒng)的基礎(chǔ)。在實(shí)際編程時(shí),我們可以把完成某種功能的函數(shù)放在一個(gè)動(dòng)態(tài)鏈接庫(kù)中,然后提供給其他程序調(diào)用,并且可以被不同的編程語言調(diào)用。
Windows服務(wù)(Service)是一種計(jì)算機(jī)程序,運(yùn)行在后臺(tái)。創(chuàng)建時(shí)遵從特定的規(guī)則和協(xié)議,并可指定其擁有管理員權(quán)限。其可配置為當(dāng)操作系統(tǒng)啟動(dòng)時(shí)自啟動(dòng)運(yùn)行。操作系統(tǒng)運(yùn)行期間,服務(wù)程序會(huì)在后臺(tái)一直運(yùn)行。
管道(Pipe) 實(shí)際上是用于進(jìn)程間通信的一段共享內(nèi)存。創(chuàng)建管道的進(jìn)程稱為管道服務(wù)器,連接到管道的進(jìn)程稱為管道客戶端。一個(gè)進(jìn)程在向管道寫入數(shù)據(jù)后,另一進(jìn)程就可以從管道中將其讀取出來。
服務(wù)程序和管道在Windows系統(tǒng)下,都有對(duì)應(yīng)的API接口操作函數(shù)。
SD(Security Descriptors)即安全描述符。Windows下的一些資源安全對(duì)象,如:進(jìn)程,命名管道,注冊(cè)表等,都可以設(shè)置用戶訪問權(quán)限,而訪問權(quán)限的相關(guān)信息就是用一個(gè)安全描述符(SD)的結(jié)構(gòu)來保存的。
SACL(System Access Control List)即系統(tǒng)控制訪問列表,其指出了在安全對(duì)象上的一組存取方式(如,讀、寫、運(yùn)行等)的存取控制權(quán)限細(xì)節(jié)的列表。
Windows系統(tǒng)下訪問外設(shè)智能設(shè)備時(shí),需要調(diào)用Windows API接口函數(shù):CreateFile。該函數(shù)特別指出:調(diào)用者必須具有管理員權(quán)限;因此,在Windows系統(tǒng)下,對(duì)外設(shè)的智能密碼設(shè)備訪問時(shí),是需要管理員權(quán)限的,而Windows的受限用戶是不具備管理員權(quán)限的,這樣在不開UAC的情況下是訪問不到智能密碼設(shè)備的。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的技術(shù)任務(wù)是提供一種WINDOWS系統(tǒng)受限用戶下訪問智能密碼設(shè)備的方法。
本發(fā)明的技術(shù)任務(wù)是按以下方式實(shí)現(xiàn)的,該方法是通過Windows 管道技術(shù)在系統(tǒng)中建立一個(gè)內(nèi)存通道,不同的進(jìn)程都可以訪問;在Dll動(dòng)態(tài)鏈接庫(kù)中,創(chuàng)建一個(gè)命名管道,用于和Service服務(wù)程序做進(jìn)程間通信;Dll動(dòng)態(tài)鏈接庫(kù)中打開管道,發(fā)送操控智能密碼設(shè)備的命令數(shù)據(jù)到管道并從管道中接收智能密碼設(shè)備返回的數(shù)據(jù);Service服務(wù)程序中打開該命名管道,接收管道中的命令數(shù)據(jù),在服務(wù)程序端對(duì)智能密碼設(shè)備進(jìn)行訪問和交互,然后把智能密碼設(shè)備返回的數(shù)據(jù)發(fā)送到管道中。
所述的在Dll動(dòng)態(tài)鏈接庫(kù)中創(chuàng)建的管道,使用完畢后,及時(shí)關(guān)閉管道并釋放相關(guān)資源。
所述的在Dll動(dòng)態(tài)鏈接庫(kù)中創(chuàng)建的管道,管道創(chuàng)建時(shí)對(duì)其設(shè)置訪問權(quán)限屬性;通過設(shè)置SACL的值構(gòu)建管道的安全描述符。
該方法的操作過程如下:
1)上層應(yīng)用調(diào)用封裝的中間件Dll動(dòng)態(tài)鏈接庫(kù)接口去訪問設(shè)備;
2)Dll動(dòng)態(tài)鏈接庫(kù)接口內(nèi)部,會(huì)打開已有的命名管道,如果命名管道不存在,則創(chuàng)建具有低完整性安全級(jí)別的命名管道;同時(shí)把操作智能密碼設(shè)備的Cmd命令數(shù)據(jù)發(fā)送到管道中;
3)Service服務(wù)程序開機(jī)自啟動(dòng)且在后臺(tái)一直運(yùn)行,檢測(cè)管道中的數(shù)據(jù)變化;當(dāng)檢測(cè)到管道中有數(shù)據(jù)后,會(huì)接收管道中的命令數(shù)據(jù);
4)Service服務(wù)程序根據(jù)接收到的命令數(shù)據(jù),訪問交互智能密碼設(shè)備,并接收智能密碼設(shè)備返回的數(shù)據(jù);
5)Service服務(wù)程序把智能密碼設(shè)備返回的數(shù)據(jù)發(fā)送到命名管道中;
6)Dll動(dòng)態(tài)鏈接庫(kù)接口從命名管道中接收到智能密碼設(shè)備返回的數(shù)據(jù),然后對(duì)數(shù)據(jù)做對(duì)應(yīng)處理或者呈現(xiàn)給上層應(yīng)用。
本發(fā)明的一種WINDOWS系統(tǒng)受限用戶下訪問智能密碼設(shè)備的方法和現(xiàn)有技術(shù)相比,該方法結(jié)合了系統(tǒng)服務(wù)(Service),管道通信(Pipe),Dll動(dòng)態(tài)鏈接庫(kù),系統(tǒng)資源對(duì)象權(quán)限設(shè)置等相關(guān)技術(shù)實(shí)現(xiàn)。Service服務(wù)程序是在后臺(tái)運(yùn)行,Dll動(dòng)態(tài)鏈接庫(kù)接口和Service程序的交互,對(duì)調(diào)用者而言都是透明的,在上層應(yīng)用操控智能密碼設(shè)備時(shí),只需要調(diào)用Dll動(dòng)態(tài)鏈接庫(kù)接口就可以,操作簡(jiǎn)單方便。該方法可適用于不同的上層應(yīng)用對(duì)設(shè)備的訪問,并且可基于此做二次開發(fā)。
附圖說明
附圖1為一種WINDOWS系統(tǒng)受限用戶下訪問智能密碼設(shè)備的方法的流程示意圖。
具體實(shí)施方式
實(shí)施例1:
該WINDOWS系統(tǒng)受限用戶下訪問智能密碼設(shè)備的方法:是通過Windows 管道技術(shù)在系統(tǒng)中建立一個(gè)內(nèi)存通道,不同的進(jìn)程都可以訪問;在Dll動(dòng)態(tài)鏈接庫(kù)中,創(chuàng)建一個(gè)命名管道,用于和Service服務(wù)程序做進(jìn)程間通信;Dll動(dòng)態(tài)鏈接庫(kù)中打開管道,發(fā)送操控智能密碼設(shè)備的命令數(shù)據(jù)到管道并從管道中接收智能密碼設(shè)備返回的數(shù)據(jù);Service服務(wù)程序中打開該命名管道,接收管道中的命令數(shù)據(jù),在服務(wù)程序端對(duì)智能密碼設(shè)備進(jìn)行訪問和交互,然后把智能密碼設(shè)備返回的數(shù)據(jù)發(fā)送到管道中。
所述的在Dll動(dòng)態(tài)鏈接庫(kù)中創(chuàng)建的管道,使用完畢后,及時(shí)關(guān)閉管道并釋放相關(guān)資源;在Dll動(dòng)態(tài)鏈接庫(kù)中創(chuàng)建的管道,管道創(chuàng)建時(shí)對(duì)其設(shè)置訪問權(quán)限屬性;通過設(shè)置SACL的值構(gòu)建管道的安全描述符,具體SACL值為
“S:(ML;;NW;;;LW)”,調(diào)用API接口:
ConvertStringSecurityDescriptorToSecurityDescriptor
這里構(gòu)建了一個(gè)低完整性級(jí)別的安全描述符,這是必需的,因?yàn)榈屯暾园踩?jí)別才能保證不同的進(jìn)程對(duì)管道的正確訪問。
上述創(chuàng)建命名管道時(shí),可以在Dll動(dòng)態(tài)鏈接庫(kù)端創(chuàng)建,也可以在Service服務(wù)程序端創(chuàng)建。這里選擇在Dll動(dòng)態(tài)鏈接庫(kù)端創(chuàng)建管道,做為管道服務(wù)器使用。因?yàn)镾ervice服務(wù)程序是在后臺(tái)一直運(yùn)行,而創(chuàng)建管道是會(huì)耗費(fèi)系統(tǒng)資源的,如果Service程序創(chuàng)建管道后,而不去使用,就造成了系統(tǒng)資源的浪費(fèi),而且一直不釋放管道資源,可能會(huì)有潛在的內(nèi)存問題發(fā)生。
該WINDOWS系統(tǒng)受限用戶下訪問智能密碼設(shè)備的方法的操作過程如下:
1)上層應(yīng)用調(diào)用封裝的中間件Dll動(dòng)態(tài)鏈接庫(kù)接口去訪問設(shè)備;
2)Dll動(dòng)態(tài)鏈接庫(kù)接口內(nèi)部,會(huì)打開已有的命名管道,如果命名管道不存在,則創(chuàng)建具有低完整性安全級(jí)別的命名管道;同時(shí)把操作智能密碼設(shè)備的Cmd命令數(shù)據(jù)發(fā)送到管道中;
3)Service服務(wù)程序開機(jī)自啟動(dòng)且在后臺(tái)一直運(yùn)行,檢測(cè)管道中的數(shù)據(jù)變化;當(dāng)檢測(cè)到管道中有數(shù)據(jù)后,會(huì)接收管道中的命令數(shù)據(jù);
4)Service服務(wù)程序根據(jù)接收到的命令數(shù)據(jù),訪問交互智能密碼設(shè)備,并接收智能密碼設(shè)備返回的數(shù)據(jù);
5)Service服務(wù)程序把智能密碼設(shè)備返回的數(shù)據(jù)發(fā)送到命名管道中;
6)Dll動(dòng)態(tài)鏈接庫(kù)接口從命名管道中接收到智能密碼設(shè)備返回的數(shù)據(jù),然后對(duì)數(shù)據(jù)做對(duì)應(yīng)處理或者呈現(xiàn)給上層應(yīng)用。
通過上面具體實(shí)施方式,所述技術(shù)領(lǐng)域的技術(shù)人員可容易的實(shí)現(xiàn)本發(fā)明。但是應(yīng)當(dāng)理解,本發(fā)明并不限于上述的幾種具體實(shí)施方式。在公開的實(shí)施方式的基礎(chǔ)上,所述技術(shù)領(lǐng)域的技術(shù)人員可任意組合不同的技術(shù)特征,從而實(shí)現(xiàn)不同的技術(shù)方案。