windows核心程式設計 程序許可權總結

2021-07-24 23:27:02 字數 2816 閱讀 8953

1、首先,乙個程序要進行特權操作,例如修改其他程序記憶體資料的話,必須要有比較大的特權,

一般來說,只有管理員賬號有這個許可權,那麼我們程式的第一件事情,就是確認當前啟動這個程序

的賬號,是否為管理員賬號

//可以把這個函式當windows api來使用,這個函式返回bool值,當函式返回true成功,當為false失敗

/*

token_elevation_type* pelevationtype:令牌提公升型別。

bool*pisadmin:是否是管理員,儲存結果

這個函式確定了,執行當前程式的賬號,是否為管理員賬號,以及當前程序的令牌,是哪種令牌

甚至你還可以確定,當前的這個作業系統是否啟用了uac功能

*/

bool

getprocesselevation(token_elevation_type* pelevationtype, 

bool

* pisadmin)  

token_elevation_type, *ptoken_elevation_type;

*/

if

(gettokeninformation(htoken, tokenelevationtype,  

pelevationtype, sizeof

(token_elevation_type), &dwsize))  

//不要忘記關閉原始令牌

closehandle(hunfilteredtoken);

}

else

closehandle(htoken);//不要忘記關閉程序令牌

return

bresult;  

}

}

2、如果當前作業系統使用了uat機制,那麼我們當前執行的程式有可能是以過濾令牌的身份在執行,

此時,如果我們想使用高階許可權,必須開通我們令牌中的一些特權,例如除錯許可權,這是,就用到了

使用者許可權提公升

bool enabledebugprivilege(bool fenable)  

token_privileges, *ptoken_privileges;

typedef struct _luid_and_attributes luid_and_attributes, * pluid_and_attributes;

*/

tp.privilegecount = 1;//此時我們值啟動除錯許可權,所以是1

//下面乙個函式,查詢除錯許可權luid,如果第乙個引數是null

//表示獲取本地的某個許可權的luid

lookupprivilegevalue(null, se_debug_name, &tp.privileges[0].luid);

//上面的lookupprivilegevalue函式,獲取本地系統的除錯許可權luid

//下面一句話,在tp.privileges[0].attributes屬性中,設定開啟這個許可權還是關閉這個許可權

tp.privileges[0].attributes = fenable ? se_privilege_enabled : 0;

//當attributes=se_privilege_enable時,啟用許可權

//當attributes=0時,關閉許可權

adjusttokenprivileges(htoken,false,&tp,sizeof(tp),null,null);

//adjusttokenprivileges啟用或者關閉tp中給定的許可權

fok = (getlasterror() == error_success);//確認啟用是否成功

closehandle(htoken);

} return fok;

}

3、如果乙個老的程式,沒有考慮到特權問題,需要使用者手動去提公升特權,如何將這個老程式進行封裝,

使使用者不用手動提公升特權,直接執行這個程式,這個就用到了以管理員身份啟動乙個程序

dword startelevatedprocess(lpctstr szexecutable,lpctstr szcmdline)

4、如何讓乙個程式自動判斷是64位作業系統,並且選擇合適的應用程式版本進行執行

#include #include typedef bool(winapi *lpfn_iswow64process) (handle, pbool);

lpfn_iswow64process fniswow64process;//定義的乙個函式指標變數

bool iswow64()

}return biswow64;

}int main(void)

windows核心程式設計 程序

程序定義成乙個正在執行的程式的例項,包含兩個部分 1 乙個核心物件,作業系統用它來管理程序。核心物件也是系統儲存程序統計資訊的地方。2 乙個位址空間,其中包含所有可執行 exe檔案 或dll模組的 和資料。此外,還包括動態記憶體分配,比如執行緒堆疊和堆的分配。windows支援兩種型別的應用程式 g...

windows核心程式設計 程序初步

程序 什麼是程序,系統如何建立乙個核心物件來管理程序。如何通過程序核心物件來操作乙個程序。程序的屬性,以及查詢和修改程序屬性的函式。程序的結束。乙個程序,就是乙個正在執行的程式!乙個程式,可以產生多個程序。程序是死的,程序必須有乙個執行緒!primary thread 如果程序內所有執行緒退出,那麼...

windows 核心程式設計 筆記之 程序

內容 windows程序 process 如上圖所示,windows任務管理器中的程序tab列中列出了系統管理的所有程序,我們經常利用任務管理器來結束某個沒有得到響應的應用程式,但是,作為乙個windows程式設計師,我們應該有這樣的疑問 程序是什麼東西?系統為什麼會存在程序?程序有哪些屬性?程序是...