91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vbs怎么通過WMI修改文件文件夾的NTFS權限

發布時間:2021-08-27 15:51:02 來源:億速云 閱讀:162 作者:chen 欄目:開發技術

這篇文章主要介紹“vbs怎么通過WMI修改文件文件夾的NTFS權限”,在日常操作中,相信很多人在vbs怎么通過WMI修改文件文件夾的NTFS權限問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”vbs怎么通過WMI修改文件文件夾的NTFS權限”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

使用WMI修改文件文件夾的NTFS權限, 代碼:

復制代碼 代碼如下:


strUser = "guests"
strPath = "D:\\abc.txt"
RetVal = AddPermission(strUser,strPath,"R",True)

'-------------------------------------------------------------------------

'用于給文件和文件夾添加一條權限設置.返回值: 0-成功,1-賬戶不存在,2-路徑不存在
'strUser表示用戶名或組名
'strPath表示文件夾路徑或文件路徑
'strAccess表示允許權限設置的字符串,字符串中帶有相應字母表示允許相應權限: R-讀,C-讀寫,F-完全控制
'blInherit表示是否繼承父目錄權限.True為繼承,False為不繼承

Function AddPermission(strUser,strPath,strAccess,blInherit)
        Set objWMIService = GetObject("winmgmts:\\.\root\Cimv2")
        Set fso = CreateObject("Scripting.FileSystemObject")
        '得到Win32_SID并判斷用戶/組/內置賬戶是否存在
        Set colUsers = objWMIService.ExecQuery("SELECT * FROM Win32_Account WHERE Name='"&strUser&"'")
        If colUsers.count<>0 Then
                For Each objUser In colUsers
                        strSID = objUser.SID
                Next
        Else
                AddPermission = 1
                Exit Function
        End If
        Set objSID = objWMIService.Get("Win32_SID.SID='"&strSID&"'")
        '判斷文件/文件夾是否存在
        pathType = ""
        If fso.fileExists(strPath) Then pathType = "FILE"
        If fso.folderExists(strPath) Then pathType = "FOLDER"
        If pathType = "" Then
                AddPermission = 2
                Exit Function
        End If
        '設置Trustee
        Set objTrustee = objWMIService.Get("Win32_Trustee").SpawnInstance_()
        objTrustee.Domain = objSID.ReferencedDomainName
        objTrustee.Name = objSID.AccountName
        objTrustee.SID = objSID.BinaryRepresentation
        objTrustee.SidLength = objSID.SidLength
        objTrustee.SIDString = objSID.Sid
        '設置ACE
        Set objNewACE = objWMIService.Get("Win32_ACE").SpawnInstance_()
        objNewACE.Trustee = objTrustee
        objNewACE.AceType = 0
        If InStr(UCase(strAccess),"R") > 0 Then objNewACE.AccessMask = 1179817
        If InStr(UCase(strAccess),"C") > 0 Then objNewACE.AccessMask = 1245631
        If InStr(UCase(strAccess),"F") > 0 Then objNewACE.AccessMask = 2032127
        If pathType = "FILE" And blInherit = True Then objNewACE.AceFlags = 16
        If pathType = "FILE" And blInherit = False Then objNewACE.AceFlags = 0
        If pathType = "FOLDER" And blInherit = True Then objNewACE.AceFlags = 19
        If pathType = "FOLDER" And blInherit = False Then objNewACE.AceFlags = 3
        '設置SD
        Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='"&strPath&"'")
        Call objFileSecSetting.GetSecurityDescriptor(objSD)
        blSE_DACL_AUTO_INHERITED = True
        If (objSD.ControlFlags And &H400) = 0 Then
                blSE_DACL_AUTO_INHERITED = False
                objSD.ControlFlags = (objSD.ControlFlags Or &H400)               
    '自動繼承位置位,如果是剛創建的目錄或文件該位是不置位的,需要置位
        End If
        If blInherit = True Then
                objSD.ControlFlags = (objSD.ControlFlags And &HEFFF)       
    '阻止繼承復位
        Else
                objSD.ControlFlags = (objSD.ControlFlags Or &H1400)               
    '阻止繼承位置位,自動繼承位置位
        End If
        objOldDacl = objSD.Dacl
        ReDim objNewDacl(0)
        Set objNewDacl(0) = objNewACE
        If IsArray(objOldDacl) Then               
  '權限為空時objOldDacl不是集合不可遍歷
                For Each objACE In objOldDacl
                        If (blSE_DACL_AUTO_INHERITED=False And blInherit=True) Or ((objACE.AceFlags And 16)>0 And (blInherit=True) Or (LCase(objACE.Trustee.Name)=LCase(strUser))) Then
                                'Do nothing
                                '當自動繼承位置位為0時即使時繼承的權限也會顯示為非繼承,這時所有權限都不設置
                                '當自動繼承位置位為0時,在繼承父目錄權限的情況下不設置繼承的權限.賬戶和需要加權限的賬戶一樣時不設置權限
                        Else
                                Ubd = UBound(objNewDacl)
                                ReDim preserve objNewDacl(Ubd+1)
                                Set objNewDacl(Ubd+1) = objACE
                        End If
                Next
        End If

        objSD.Dacl = objNewDacl
        '提交設置修改
        Call objFileSecSetting.SetSecurityDescriptor(objSD)
        AddPermission = 0
        Set fso = Nothing
End Function

到此,關于“vbs怎么通過WMI修改文件文件夾的NTFS權限”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣威市| 怀宁县| 邵东县| 建德市| 沁阳市| 通榆县| 岳阳县| 岱山县| 虹口区| 疏勒县| 长治市| 日喀则市| 柳州市| 锦州市| 江油市| 山西省| 新田县| 房产| 石狮市| 安岳县| 石林| 阿城市| 清镇市| 威宁| 宁城县| 彭泽县| 东莞市| 梅州市| 绵竹市| 巫溪县| 吉安市| 固镇县| 西吉县| 同心县| 连城县| 德惠市| 综艺| 蓬溪县| 奉贤区| 习水县| 溆浦县|