管理員以標準權限運行時

在XP時代,大多數用戶都用一個管理員(administrator)帳號來登錄Windows
利用這個賬戶,用戶幾乎能沒有任何限制的訪問重要的系統資源,因為該賬戶被授予了很高的權限,一旦用這個帳號登錄了xp以及xp之前的操作系統,Windows操作系統就會創建一個安全令牌(security token).每當有代碼試圖訪問一個受保護的安全資源的時候,操作系統就會使用(出示)這個安全令牌,

從Windows在內的第一個進程開始,這個令牌會與新建的所有進程關聯,這樣如果新下載了一個惡意程序,就會繼承管理員的高權限,------因此可以肆無忌憚的修改機器上的任何內容,甚至啟動同一個高特權的進程

那么從vista開始,如果用戶使用管理員帳號來登錄這樣一個被授予高特權的賬戶登錄,那么除了與這個賬戶登錄對應的安全令牌之外,還會創建一個進過篩選的令牌(filtered token)后者只給標準用戶的權限(Standard User).以后包括Windows資源管理器在內的第一個進程開始,這個篩選后的令牌會與系統表示最終用戶啟動啟動的所有新進程關聯,權限受限制的進程無法訪問需要更高權限才能訪問的安全資源.

如果 需要管理員權限呢?
-----------------------------------------------------------------------------------------------------------------
首先,我們可以要求操作系統提升權限,但只能是進程邊界提升權限

(1)單擊右鍵 Run As Administrator
如果應用程序是操作系統的一部分? 那么會顯示一個藍色的橫幅
如果引用程序進行了簽名,對話框中將顯示一個灰色的橫幅,表明Windows沒有足夠的把握來確定應用程序是安全了
如果應用程序沒有進行簽名,系統會在對話框中顯示一個橙色的橫幅,并且要求用戶謹慎回答
如果用戶沒有以一個管理員帳號來登錄系統,那么Windows會彈出一個要求用戶輸入管理員權限的帳號密碼,這樣應用程序才能以管理員權限來運行,這被稱為over-the-shoulder登錄

(2)manifest文件

? <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
??? <security>
????? <requestedPrivileges>
??????? <requestedExecutionLevel level="highestAvailable"></requestedExecutionLevel>
????? </requestedPrivileges>
??? </security>
? </trustInfo>


如上?? 被稱為一種特殊的資源RT_MANIFEST特殊資源,將其編譯到exe資源節區中,系統會按照requestedExecutionLevel節來判斷進程的權限,并執行一些操作

requireAdministrator -->應用程序必須以管理員權限啟動,否則不會運行
highestAvailable-->應用程序以當前可用的最高權限運行
??????????????????????? -->如果用戶使用管理員帳號登錄,就會出現一個要求批準提升權限的對話框
??????????????????????? -->如果用戶使用普通用戶賬戶登錄系統,就使用標準權限來啟動
asInvoker???????? -->應用程序以主調應用程序一樣的權限來啟動

(3).還可以在應用程序的屬性對話框中選中對應的復選框

(4)手動提升權限進程的權限
在CreateProcess函數中,沒有專門提供神馬標記參數來指定對這種權限的提升
相反,我們可以調用ShellExecuteEx函數

BOOL ShellExecuteEx(
??? LPSHELLEXECUTEINFO lpExecInfo
);

typedef struct _SHELLEXECUTEINFO{
??? DWORD cbSize;
??? ULONG fMask;
??? HWND hwnd;
??? LPCTSTR lpVerb;
??? LPCTSTR lpFile;
??? LPCTSTR lpParameters;
??? LPCTSTR lpDirectory;
??? int nShow;
??? HINSTANCE hInstApp;
?
??? // Optional members
??? LPVOID lpIDList;
??? LPCSTR lpClass;
??? HKEY hkeyClass;
??? DWORD dwHotKey;
?union {
??HANDLE hIcon;
??HANDLE hMonitor;
?};
??? HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

這個結構體唯一有趣的2個字段是lpVerb和lpFile,前者必須被設置為"runas",后者必須包含使用提升后的權限來啟動的一個可執行文件的路徑,如下代碼:

SHELLEXECUTEINFO sei = {sizeof(SHELLEXECUTEINFO)};
sei.lpVerb = TEXT("runas");
sei.lpFile = TEXT("cmd.exe");
sei.nShow = SW_NORMAL;
if (!ShellExecuteEx(&sei))
{
?DWORD dwStatus = GetLastError();
?if (dwStatus == ERROR_CANCELLED)
?{
??printf("沒有以管理員權限運行");
?}
?else
??if(dwStatus == ERROR_FILE_NOT_FOUND)
?{
??printf("沒有找到該文件");
?}
}

如果用戶拒絕提升權限ShellExecuteEx會返回FALSE,可以通過GetLastError()使用一個ERROR_CANCELLED值來指出這種情況

注意當一個進程使用一個提升后的權限啟動時,它每次使用CreateProcess來生成另一個進程時,子進程都會獲取和它父進程一樣的提升后的權限,假如一個應用程序是使用一個篩選后的令牌來運行的,那么一旦試圖調用CreateProcess來生成一個要求提升權限的可執行文件,這個調用就會失敗,GetLastError會返回ERROR_ELFVATION_REQUIRED

(5)按鈕上顯示一個盾牌圖標

①.首先我們需要解決的事情是獲取當前進程是否以管理員權限運行的.
②.Button_SetElevationRequiredState宏可以幫助我們來設置或者隱藏小盾牌圖標
實質上是:
#define Button_SetElevationRequiredState(hwnd, fRequired) (LRESULT)SNDMSG((hwnd), BCM_SETSHIELD, 0, (LPARAM)fRequired)
SendMessage((hwnd), BCM_SETSHIELD, 0, (LPARAM)fRequired);
SendMessage(hwnd, 0x160C, 0, 0xFFFFFFFF);
③.在按鈕點擊事件中使用ShellExecuteEx,以管理員權限重新調用自己


詳細代碼打包傳網盤? 請猛點擊下面下載 (Win32 SDK)


http://dl.dbank.com/c0rcubga3h

?

?

?


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HDU 4791 amp; ZOJ 3726 Alice#39;s Print Service (數學 打表)

題目鏈接&#xff1a; HDU:http://acm.hdu.edu.cn/showproblem.php?pid4791 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId5072 Problem DescriptionAlice is providing print service, while the pricing doesnt seem to be reasonable, so people using…

奪命雷公狗---ECSHOP---08---商品頁的拇改成星星

<strong>用戶評價&#xff1a;</strong>{*---------商品評價星星開始----------*}<img src"./images/stars{$goods.comment_rank}.gif" alt"comment rank {$goods.comment_rank}">{*---------商品評價星星結束-------*} 這里主要是要有星…

文件指針

一.移動文件指針 SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod dwMoveMethod 指明移動的模式 FILE_BEGIN 不管文件處于什么地方,總是從文件的頭部開始移動,這時的位置參數相當于指定了一個絕對位置 FILE_CURRENT 從當前的文件指針處開始移…

見證下的自我變化-2014全年總結

又是一年總結季&#xff0c;回過頭看看看自己的成長&#xff0c;心里真的是滿滿的喜悅之情…… 一年前自己的總結博客&#xff1a;http://blog.csdn.net/huo065000/article/details/19632603 半年前自己的總結博客&#xff1a;http://blog.csdn.net/huo065000/article/details/…

【Linux學習篇】This virtual machine is configured for 64-bit guest operating systems.……

在學習Linux的基本操作的時候&#xff0c;安裝虛擬環境則提示自己 This virtualmachine is configured for 64-bit guest operatingsystems.……起初由于各種拒絕的心理&#xff0c;所以屏蔽了這個錯誤&#xff0c;但是屏蔽永遠也解決不了問題的&#xff0c;所以自己則嘗試百度…

圖解SSIS監視文件夾并自動導入數據

圖解SSIS監視文件夾并自動導入數據 原文:圖解SSIS監視文件夾并自動導入數據 演示案例&#xff1a;讓系統自動監視文件夾&#xff0c;并把文件夾下面的excel文件導入到sql中&#xff0c;之后清空目錄。這個過程以往都需要寫程序來實現或者定時執行&#xff0c;現在可以用ssis來訂…

DLL轉Lib

在C中,為了允許操作符重載和函數重載,C編譯器往往按照某種規則改寫每一個入口點的符號名,以便使用同一個名字(具有不同的參數類型或者是不同的作用域)有多種不同的用法,而不會打破現有基于C的鏈接器,.這項技術通常被稱為改編(Name Mangling)或者名稱修飾(Name Decoration),許多…

WP8手機解鎖時提示“請確保IPOVERUSBSVC服務正常運行”解決方法

如果你各種重啟服務 卸載手機 重裝驅動都試過了還不行&#xff0c;請看看你是否安裝了Hyper-v或Vitualbox虛擬機&#xff0c;很有可能是虛擬交換機造成的。 我在網絡連接屬性里看到這個 把它卸載后&#xff0c;解鎖成功。 解鎖后記得重新安裝卸載的那個網絡服務轉載于:https://…

Win32路徑操作相關API

一.路徑截斷與合并 PathRemoveArgs 去除路徑的參數 PathRemoveBackslash 去除路徑最后的反斜杠 "\" PathAddBackslash 在路徑最后加上反斜杠 "\" PathRemoveBlanks 去除路徑前后的空格 PathAddExtension 在文件路徑后面加上擴展名 PathRemoveExtension 去…

Openjudge-計算概論(A)-稱體重

描述&#xff1a; 趙、錢、孫、李四個人中既有大人也有小孩&#xff0c;給他們稱體重時發現&#xff0c;他們每個人的體重都不一樣&#xff0c;且體重&#xff08;單位&#xff1a;公斤&#xff09;恰好是10的整數倍&#xff0c;且他們的體重都不高 于50公斤&#xff0c;已知趙…

浮點數的存儲

-------------------------------------------------------------------------------- 在VC6.0----float環境一共32位 其中第一位是符號位 第二到第9位中間8位為小數點位置&#xff08;指數以127的二進制為原點向下為負指數 向上為正指數&#xff09;后面23位為數據位。 S EE…

第二階段總結

結合第二階段后3天&#xff0c;我們試用了UI&#xff0c;antionbar&#xff0c;menu等實用&#xff0c;成功的做出了字體的轉換&#xff0c;題目的轉化等功能。 其實四則運算&#xff0c;說難不難 說易不易&#xff0c;總結出 主要有付出&#xff0c;就有回報。 menu等做的過程…

const 和指針

c用了那么久&#xff0c;覺得 const 和指針配合到一起的時候就會有點點分不出來。 如下: const Data* pData;Data const * pDataData * const pDataconst Data * const pData Data const * const pData是不是有點暈&#xff1f; 我其實用得最多的是 const Data* pData, 也…

Linux 查看系統用戶的登錄日志

查看用戶登錄系統的日志有兩類日志記錄用戶登錄的行為&#xff0c;一是記錄登錄者的數據&#xff0c;一個是記錄用戶的登錄時間一&#xff0c;記錄用戶登錄數據/var/log/wtmp日志文件記錄用戶登錄的數據。但這個文件是被編碼的文件&#xff0c;不能直接用vi、cat等命令查看&…

Android -- 自定義權限

在android系統的安全模型中&#xff0c;應用程序在默認的情況下不可以執行任何對其他應用程序&#xff0c;系統或者用戶帶來負面影響的操作。如果應用需要執行某些操作&#xff0c;就需要聲明使用這個操作對應的權限。 &#xff08;在manifest文件中 添加標記&#xff09;。 ap…

Win32 路徑操作API

路徑操作相關API 路徑截斷與合并函數 PathRemoveArgs 去除路徑的參數 PathRemoveBackslash 去除路徑最后的反斜杠“\” PathAddBackslash 在路徑最后加上反斜杠“\” PathRemoveBlanks 去除路徑前后的空格 PathAddExtension 在文件路徑后面加上擴展名 Pa…

dbms_output.put_line長度限制問題

dbms_output.put_line長度限制問題對于10g以上版本(包括10g), dbms_output.put_line的最大長度限制是32767. 如果報錯buffer overflow, 執行如下語句即可:set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED對于10g以下版本dbms_output.put_line最大長度限制是255.轉載于…

js深入研究之Person類案例

<script type"text/javascript"> /* 定義一個Person類 */ function Person(name, age) {this.name name;this.age age; } /* 添加兩個方法getName getAge */ Person.prototype {getName: function() {return this.name;},getAge: function() {return this.a…

C++名稱粉碎

C name mangling 1: ?0: 構造器&#xff0c;?1 析構器 2: QAE: public __thiscall AAE: private __thiscall QBE: public __thiscall const 3: 返回值和參數類型 B&#xff1a;const D&#xff1a;char E&#xff1a;unsigned char F&#xff1a;…

一款基于css3鼠標經過圓形旋轉特效

今天給大家分享一款基于css3鼠標經過圓形旋轉特效。當鼠標經過的時候圖片邊框顏色旋轉&#xff0c;圖片顯示詳情。該實例適用瀏覽器&#xff1a;IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗。效果圖如下&#xff1a; 在線預覽 源碼下載 實現的代碼。 ht…