全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2945
推到 Plurk!
推到 Facebook!

Vista 內如何不出現UAC並啟動Kernel Mode程式

答題得分者是:aftcast
markchou_tw
一般會員


發表:3
回覆:7
積分:2
註冊:2005-07-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-06 18:27:25 IP:61.20.xxx.xxx 訂閱
目前我的情況是在Vista64下要執行一程式且需要啟動Kernel mode的驅動程式 (使用service的方式).
驅動程式已經有申請Digital Signature, 但是執行的時候還是需要Run as Administrator, 或者關掉UAC才能執行.
請問我要如何做才能不關閉UAC且不選用Run as Administrator 就能順利執行程式?
我試過主程式也簽署Digital Signature, 但還是不行.

是還要加入manifesta嗎? 有否相關資訊可參考? 我試過MSDN上的說明, 加入一段

ms_asmv2:requestedExecutionLevel level="requireAdministrator"

然後用 mt.exe -manifest r64.manifest -outputresource:r64.exe;#1

結果還是一樣,
請有做過類似事情的大大解惑一下, 感激不盡~~~
編輯記錄
markchou_tw 重新編輯於 2009-04-06 18:30:21, 註解 無‧
markchou_tw 重新編輯於 2009-04-06 18:33:26, 註解 無‧
markchou_tw 重新編輯於 2009-04-06 18:34:14, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-07 12:35:33 IP:210.64.xxx.xxx 訂閱
建議可參考下面的資料

http://www.codeproject.com/KB/vista-security/VistaSessions.aspx
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
markchou_tw
一般會員


發表:3
回覆:7
積分:2
註冊:2005-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-09 18:36:52 IP:61.20.xxx.xxx 訂閱
多謝指教, 正在測試中.
在下的英文挺破, 可能得花不少時間.
待測試結束再把結果放上來, 謝謝!!!
markchou_tw
一般會員


發表:3
回覆:7
積分:2
註冊:2005-07-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-23 10:28:28 IP:61.20.xxx.xxx 訂閱
前些天忙別的事情, 今天總算是抽出時間測試.
不過啟動參考文章內的範例會出錯, 可能是我在64bit OS上測試的緣故.
只好等手上有32Bit OS的時候再測試了.

多謝大大指教...
markchou_tw
一般會員


發表:3
回覆:7
積分:2
註冊:2005-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-05 10:03:14 IP:61.20.xxx.xxx 訂閱
我已經試過範例的 Service 程式, 指令是 "service.exe -i", 但是似乎沒辦法安裝到服務裡面, 所以也沒辦法啟動 "a.exe" 這支程式.
而且這就算可以通過似乎也不是正統的處理方式.
我想問的是經由正常程序的話怎樣使程式執行時不會跳出UAC畫面.
例如各電腦開機時會載入各式各樣的驅動程式和應用程式, 卻不會有任何UAC畫面出來, 我想那應該是有另外的認證程序.
我們已經申請數位簽章, 但是那只是讓UAC畫面出現簽章擁有者的資料.
如果要讓UAC畫面完全不出現的話不知道是不是要通過WHQL等等之類的認證?

這問題看起來已經超出程式設計範圍了, 不過卻又是職場上Windows 程式設計者避不開的問題.
請有相關經驗的大大們提供一下資料, 感激不盡!!!
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-05 13:56:06 IP:210.64.xxx.xxx 訂閱
你好,

請再詳讀一下UAC的一些技術文章。你會發現由於windows logon(vista含以後)時,會分出許多不同的session,driver LOAD或是service啟動時是一個session,屬於"系統"session。而接下來user login,此時又會再建立另一個session(即使你是admin也一樣),而這二個不同的session要互動時,就需要"認證"與權限提昇並提示。這才是標準的。

而過去你使用互動式service,即user與service可以互動(xp含之前是user與system login時同session),是沒有問題的。但vista以後「正統」就是一定要提示(不管有無signature)!! 若你還是試著想要"無形"的不提示,方法就只有範例那一個了,那的確用了不正當的方式,即借(copy)session 0(系統)的權限。

所以建議別花力氣了想別的方法了。再讀一下深入的uac文件你應該可以了解。

ps。為何會這樣設計? 就是怕病毒之類的先建立service後,user進入後即可得到最高權限…改成不同的session後,即使病毒先建立service了,也不容易無形的提昇權限做任何事!

剛又發現有一篇新的文章4月21日的,有性趣再看一次,也許有你要的答案!

http://www.codeproject.com/KB/vista-security/SubvertingVistaUAC.aspx


===================引 用 markchou_tw 文 章===================
我已經試過範例的 Service 程式, 指令是 "service.exe -i", 但是似乎沒辦法安裝到服務裡面, 所以也沒辦法啟動 "a.exe" 這支程式.
而且這就算可以通過似乎也不是正統的處理方式.
我想問的是經由正常程序的話怎樣使程式執行時不會跳出UAC畫面.
例如各電腦開機時會載入各式各樣的驅動程式和應用程式, 卻不會有任何UAC畫面出來, 我想那應該是有另外的認證程序.
我們已經申請數位簽章, 但是那只是讓UAC畫面出現簽章擁有者的資料.
如果要讓UAC畫面完全不出現的話不知道是不是要通過WHQL等等之類的認證?

這問題看起來已經超出程式設計範圍了, 不過卻又是職場上Windows 程式設計者避不開的問題.
請有相關經驗的大大們提供一下資料, 感激不盡!!!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2009-05-05 14:07:16, 註解 無‧
markchou_tw
一般會員


發表:3
回覆:7
積分:2
註冊:2005-07-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-06 17:49:47 IP:61.20.xxx.xxx 訂閱

===================引 用 aftcast 文 章===================
你好,

請再詳讀一下UAC的一些技術文章。你會發現由於windows logon(vista含以後)時,會分出許多不同的session,driver LOAD或是service啟動時是一個session,屬於"系統"session。而接下來user login,此時又會再建立另一個session(即使你是admin也一樣),而這二個不同的session要互動時,就需要"認證"與權限提昇並提示。這才是標準的。

而過去你使用互動式service,即user與service可以互動(xp含之前是user與system login時同session),是沒有問題的。但vista以後「正統」就是一定要提示(不管有無signature)!! 若你還是試著想要"無形"的不提示,方法就只有範例那一個了,那的確用了不正當的方式,即借(copy)session 0(系統)的權限。

所以建議別花力氣了想別的方法了。再讀一下深入的uac文件你應該可以了解。

ps。為何會這樣設計? 就是怕病毒之類的先建立service後,user進入後即可得到最高權限…改成不同的session後,即使病毒先建立service了,也不容易無形的提昇權限做任何事!

剛又發現有一篇新的文章4月21日的,有性趣再看一次,也許有你要的答案!

http://www.codeproject.com/KB/vista-security/SubvertingVistaUAC.aspx
=================================================================================

謝謝大大費心指點, 看來程式想要以正當程序在User login 以後載入Kernel module是一定會跳出UAC視窗了.

不過有很多支援Vista的周邊裝置的驅動程式在載入時並不會跳出UAC視窗(當然在安裝驅動程式時還是會出現UAC).
所以我有另外一個想法,
就是把我的程式的Kernel module 加上inf 安裝到Vista內, 然後我的應用程式使用creatfile 或是 DeviceIoCtrl 這兩個指令和我的kernel module交換資料.
這樣只有在第一次安裝Kernel module 時會出現UAC, 以後Vista開機時就自動載入我的Kernel module, 這樣就不會每次執行程式時出現UAC了.

不知道寫周邊裝置驅動程式的廠商們是不是這樣做?
亦或是要通過WHQL才行?
我先嘗試用自己想的方法試試看, 可以的話再PO出來通知大家.
系統時間:2024-04-19 7:57:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!