我們在執行我們編寫好的python
**時,會碰到這樣的報錯問題
permissionerror: [winerror 5] 拒絕訪問。這是因為我們編寫的指令碼的許可權不夠。一種解決辦法是在管理員
cmd
中執行我們的指令碼(右鍵以 run as administrator),但是這種辦法不夠優雅。我們經常看到當我們執行一些需要高許可權的軟體時,會彈出以下對話方塊
這被稱為使用者安全控制,簡稱為uac。
那麼我們在寫**的時候怎麼新增這個功能呢?
這裡我們要用到乙個關鍵的函式shellexecute
hinstance shellexecute
( _in_opt_ hwnd hwnd,
_in_opt_ lpctstr lpoperation,
_in_ lpctstr lpfile,
_in_opt_ lpctstr lpparameters,
_in_opt_ lpctstr lpdirectory,
_in_ int nshowcmd
);
具體細節看微軟官方的文件shellexecute function
from __future__ import print_function
import ctypes, sys
defis_admin()
:try
:return ctypes.windll.shell32.isuseranadmin(
)except
:return
false
if is_admin():
# 將要執行的**加到這裡
else
:if sys.version_info[0]
==3: ctypes.windll.shell32.shellexecutew(
none
,"runas"
, sys.executable, __file__,
none,1
)else
:#in python2.x
ctypes.windll.shell32.shellexecutew(
none
, u"runas"
,unicode
(sys.executable)
,unicode
(__file__)
,none,1
)
要提醒你的是,不要在ide中執行。
如果在非管理員許可權下執行的話,其實這裡執行了兩次**,第一次肯定是沒有管理員許可權的,第二次擁有管理員許可權。
有的時候我們不希望有這種uac彈框,我們希望程式偷偷的擁有管理員許可權,這要怎麼做呢?這其實挺**的。感興趣的話,可以看這篇python如果獲取windows管理員許可權(二)
如果獲取token
基於 token 的身份驗證 使用基於 token 的身份驗證方法,在服務端不需要儲存使用者的登入記錄。流程是這樣的 客戶端使用使用者名稱跟密碼請求登入 服務端收到請求,去驗證使用者名稱與密碼 驗證成功後,服務端會簽發乙個 token,再把這個 token 傳送給客戶端 客戶端收到 token 以後...
python如果獲取windows管理員許可權(二)
我們在python如果獲取windows管理員許可權 一 中談到了uac的問題。很多時候我們不希望我們的軟體彈出uac提示,這個時候我們可以通過登錄檔的方法去解決。這其實已經不在是乙個安全的程式設計了,它變成了一把雙刃劍。當然我們只是討論這種問題該怎麼解決。具體用在什麼方面那是你的問題咯!通過下面的...
如果獲取庫函式的臨時變數?
inline hook的本質是加跳轉指令,在x86下實現比較簡單,一般用push addr ret即可 這條指定的含義是 將指定的位址壓棧,然後返回到該位址,從而實現hook 然後在指定函式內的hook,需要維持堆疊平衡,因為假設hooked之後想要跳回函式執行,但當前的上下文已經改變,這時候若跳回...