小功能隐藏着大学问---windows的ACL带来的挑战
生活随笔
收集整理的這篇文章主要介紹了
小功能隐藏着大学问---windows的ACL带来的挑战
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為什么說(shuō)這個(gè)功能小呢?1.此功能只是在用戶裝了某一軟件時(shí)才用得著,用戶裝這個(gè)軟件的可能性很小;2.此功能只需要修改一處注冊(cè)表鍵值;
于是這樣簡(jiǎn)單實(shí)現(xiàn)了:在一個(gè)windows服務(wù)程序中調(diào)用一個(gè)修改注冊(cè)表鍵值的方法進(jìn)行修改,單元測(cè)試,這個(gè)方法很成功。但是在以服務(wù)運(yùn)行的方式進(jìn)行的測(cè)試中,打開此處注冊(cè)表的方法一直報(bào)“找不到注冊(cè)表路徑”的錯(cuò)誤。諸位看官,此處注冊(cè)表的根鍵為HKEY_CURRENT_USER,大家明白為什么了嗎?“是的,與windows的ACL有關(guān),windows服務(wù)是以系統(tǒng)權(quán)限運(yùn)行的,在系統(tǒng)權(quán)限中,沒(méi)有HKEY_CURRENT_USER這個(gè)鍵。”
解決方案:1.操作HKEY_USERSHKEY_USERS這個(gè)根鍵可是包含了所有用戶的一些信息的,和相應(yīng)的HKEY_CURRENT_USER剛好一一對(duì)應(yīng),而且我們要操作的Software鍵就在其中,于是就利用他來(lái)對(duì)每一個(gè)用戶的Software鍵下的某個(gè)鍵值進(jìn)行操作。但是我們這個(gè)功能得考慮一點(diǎn),用戶一旦裝上這個(gè)軟件后就會(huì)在Software鍵下創(chuàng)建某一鍵,而我們必須要在短時(shí)間內(nèi)改寫此處鍵的某個(gè)值,但是我們根本不知道用戶什么時(shí)候裝啊!
2.注冊(cè)表監(jiān)控RegNotifyChangeKeyValue這個(gè)方法剛好能滿足我們,利用windows的消息機(jī)制我們可以做到實(shí)時(shí)監(jiān)控各個(gè)USER下的注冊(cè)表改變情況,然后利用回調(diào)函數(shù)來(lái)實(shí)現(xiàn)修改相應(yīng)的鍵值。但是當(dāng)嘗試監(jiān)控Software鍵變化時(shí),發(fā)現(xiàn)Software鍵一直有變化的消息,頻繁到感覺只有1秒。想想我們總不至于這么頻繁的操作注冊(cè)表吧。
3.設(shè)置定時(shí)器但是我們可以這樣做,采用輪詢的方式遍歷HKEY_USERS下每一個(gè)用戶,然后嘗試打開我們要操作的鍵值,如果不能打開說(shuō)明此用戶未安裝此軟件,反之用戶一定安裝了此軟件,我們就可以改寫此鍵值來(lái)實(shí)現(xiàn)我們的功能。定時(shí)器的值我們可以自己設(shè)定,至少不用那么頻繁的去操作注冊(cè)表了。
(思考:關(guān)于權(quán)限這一塊windows提供了方法可以模仿當(dāng)前用戶權(quán)限)
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
于是這樣簡(jiǎn)單實(shí)現(xiàn)了:在一個(gè)windows服務(wù)程序中調(diào)用一個(gè)修改注冊(cè)表鍵值的方法進(jìn)行修改,單元測(cè)試,這個(gè)方法很成功。但是在以服務(wù)運(yùn)行的方式進(jìn)行的測(cè)試中,打開此處注冊(cè)表的方法一直報(bào)“找不到注冊(cè)表路徑”的錯(cuò)誤。諸位看官,此處注冊(cè)表的根鍵為HKEY_CURRENT_USER,大家明白為什么了嗎?“是的,與windows的ACL有關(guān),windows服務(wù)是以系統(tǒng)權(quán)限運(yùn)行的,在系統(tǒng)權(quán)限中,沒(méi)有HKEY_CURRENT_USER這個(gè)鍵。”
解決方案:1.操作HKEY_USERSHKEY_USERS這個(gè)根鍵可是包含了所有用戶的一些信息的,和相應(yīng)的HKEY_CURRENT_USER剛好一一對(duì)應(yīng),而且我們要操作的Software鍵就在其中,于是就利用他來(lái)對(duì)每一個(gè)用戶的Software鍵下的某個(gè)鍵值進(jìn)行操作。但是我們這個(gè)功能得考慮一點(diǎn),用戶一旦裝上這個(gè)軟件后就會(huì)在Software鍵下創(chuàng)建某一鍵,而我們必須要在短時(shí)間內(nèi)改寫此處鍵的某個(gè)值,但是我們根本不知道用戶什么時(shí)候裝啊!
2.注冊(cè)表監(jiān)控RegNotifyChangeKeyValue這個(gè)方法剛好能滿足我們,利用windows的消息機(jī)制我們可以做到實(shí)時(shí)監(jiān)控各個(gè)USER下的注冊(cè)表改變情況,然后利用回調(diào)函數(shù)來(lái)實(shí)現(xiàn)修改相應(yīng)的鍵值。但是當(dāng)嘗試監(jiān)控Software鍵變化時(shí),發(fā)現(xiàn)Software鍵一直有變化的消息,頻繁到感覺只有1秒。想想我們總不至于這么頻繁的操作注冊(cè)表吧。
3.設(shè)置定時(shí)器但是我們可以這樣做,采用輪詢的方式遍歷HKEY_USERS下每一個(gè)用戶,然后嘗試打開我們要操作的鍵值,如果不能打開說(shuō)明此用戶未安裝此軟件,反之用戶一定安裝了此軟件,我們就可以改寫此鍵值來(lái)實(shí)現(xiàn)我們的功能。定時(shí)器的值我們可以自己設(shè)定,至少不用那么頻繁的去操作注冊(cè)表了。
(思考:關(guān)于權(quán)限這一塊windows提供了方法可以模仿當(dāng)前用戶權(quán)限)
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
總結(jié)
以上是生活随笔為你收集整理的小功能隐藏着大学问---windows的ACL带来的挑战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Cisco 2960 交换机密码设置
- 下一篇: window2003 server的一些