2015-09-30 24 views
1

我正試圖在Windows 10(家庭版)上使用python在foll上使用python創建符號鏈接。代碼:嘗試在Windows 10上使用python創建符號鏈接的Privlege錯誤

import ctypes 

kdll = ctypes.windll.LoadLibrary("kernel32.dll") 
kdll.CreateSymbolicLinkW(src_dir, dst_dir, 1) 

但我得到了foll。錯誤:

*** error: (1314, 'CreateSymbolicLink', 'A required privilege is not held by the client.') 

如何解決此問題?

+0

如果啓用UAC和你的用戶是管理員,那麼你必須提升(即「以管理員身份運行」)來獲取具有'SeCreateSymbolicLinkPrivilege'無限制管理員令牌。 – eryksun

+0

謝謝@eryksun,我確實有管理員權限,但我該如何處理您的建議?如果你可以把它作爲答案,我會很樂意接受它 – user308827

+1

Windows-X,A將打開一個管理命令行窗口。如果你從那裏運行你的Python程序,它應該工作。 –

回答

3

如果啓用UAC並且您的用戶是管理員,則本地安全頒發機構(LSA,託管在lsass.exe中)將使用受限訪問令牌記錄您的用戶。對於此令牌,BUILTIN\Administrators組僅用於拒絕訪問;完整性級別標籤中等而不是高;並且通常授予管理員的權限已被過濾掉。

要創建符號鏈接,您需要使用無限制/提升的訪問令牌(即從中等到高完整性級別提升)來創建進程。通過右鍵單擊並選擇「以管理員身份運行」來執行此操作。此提升的令牌將由子進程繼承,因此從提升的命令提示符處運行Python腳本就足夠了,您可以通過鍵盤快捷方式打開該運行腳本Win + XA。您可以通過運行whoami /priv並檢查是否存在SeCreateSymbolicLinkPrivilege來驗證cmd shell是否已升級。如果狀態被禁用,請不要驚慌。 Windows CreateSymbolicLink函數自動啓用此權限。

這就是說,既然你正在創建一個目錄符號鏈接,那麼也許一個連接點也可以工作。創建交匯點不需要特別的權限。您可以使用cmd的mklink命令創建聯結。例如:

subprocess.check_call('mklink /J "%s" "%s"' % (link, target), shell=True) 
+0

偉大的解釋。謝謝! – user308827

相關問題