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程式設計師,我們應該有這樣的疑問 程序是什麼東西?系統為什麼會存在程序?程序有哪些屬性?程序是...