python如果獲取windows管理員許可權(一)

2021-08-14 10:52:50 字數 1564 閱讀 7449

我們在執行我們編寫好的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之後想要跳回函式執行,但當前的上下文已經改變,這時候若跳回...