gpt4 book ai didi

vbs通过WMI修改文件文件夹的NTFS权限

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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权限的文章就讲到这里了,如果你想了解更多关于vbs通过WMI修改文件文件夹的NTFS权限的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com