`
feiliboos
  • 浏览: 672675 次
文章分类
社区版块
存档分类
最新评论

?如何用vb程序设置文件夹权限

 
阅读更多

关于怎样用vb程序对win2000和win2003下NTFS格式的磁盘上的文件及文件夹进行用户权限操作,在论坛上发贴和在msdn搜到程序在对权限操作的时候都出现问题:
在文件夹使用继承属性时,用程序设置过文件夹的权限后,打开文件夹的"属性-》安全"标签的时候提示“XXXX 上的权限顺序不正确,可能导致某些数据无法作用。请按“确定”以继续并将权限正确排序,或按“取消”来复位权限。”
在在文件夹不是使用继承属性时,设置后权限正常!

问题一直未解决希望各位能指教,谢谢!
论坛帖子地址:http://community.csdn.net/Expert/topic/5685/5685970.xml?temp=.499798
       http://community.csdn.net/Expert/topic/5726/5726633.xml?temp=.5362818

程序如下:

Option Explicit

Private Const FOLDER_PATH = "f:/Test"

' Success status of high level access control APIs
Private Const ERROR_SUCCESS = 0&

' Type of Securable Object we are operating in this sample code
Private Const SE_FILE_OBJECT = 1&
Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL
' The Security Information constants required
Private Const DACL_SECURITY_INFORMATION = 4&
Private Const SET_ACCESS = 2&

Private Enum SE_OBJECT_TYPE
SE_UNKNOWN_OBJECT_TYPE = 0&
SE_FILE_OBJECT = 1&
SE_SERVICE = 2&
SE_PRINTER = 3&
SE_REGISTRY_KEY = 4&
SE_LMSHARE = 5&
SE_KERNEL_OBJECT = 6&
SE_WINDOW_OBJECT = 7&
End Enum
' Standard access rights extracted from WinNT.h
Private Const SYNCHRONIZE = &H100000
Private Const READ_CONTROL = &H20000
Private Const WRITE_DAC = &H40000
Private Const WRITE_OWNER = &H80000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const DELETE = &H10000

' Generic access rights extracted from WinNT.h
Private Const GENERIC_ALL = &H10000000
Private Const GENERIC_EXECUTE = &H20000000
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000

' Inheritance Flags
Private Const CONTAINER_INHERIT_ACE = &H2
Private Const OBJECT_INHERIT_ACE = &H1

' The TRUSTEE structure identifies the user account, group account, or logon session
' to which an ACE applies. The structure can use a name or a security identifier (SID)
' to identify the trustee.

' Access control APIs, such as SetEntriesInAcl and GetExplicitEntriesFromAcl, use this
' structure to identify the account associated with the access-control or audit-control
' information in an EXPLICIT_ACCESS structure.
Private Type TRUSTEE
pMultipleTrustee As Long
MultipleTrusteeOperation As Long
TrusteeForm As Long
TrusteeType As Long
ptstrName As String
End Type

' EXPLICIT_ACCESS structure that specifies access-control information for a specified
' trustee such as access mask as well as inheritance flags
Private Type EXPLICIT_ACCESS
grfAccessPermissions As Long
grfAccessMode As Long
grfInheritance As Long
pTRUSTEE As TRUSTEE
End Type

' High Level access control API declarations
Private Declare Sub BuildExplicitAccessWithName Lib "Advapi32.dll" Alias _
"BuildExplicitAccessWithNameA" _
(ea As Any, _
ByVal TrusteeName As String, _
ByVal AccessPermissions As Long, _
ByVal AccessMode As Integer, _
ByVal Inheritance As Long)

Private Declare Function SetEntriesInAcl Lib "Advapi32.dll" Alias _
"SetEntriesInAclA" _
(ByVal CountofExplicitEntries As Long, _
ea As Any, _
ByVal OldAcl As Long, _
NewAcl As Long) As Long

Private Declare Function GetNamedSecurityInfo Lib "Advapi32.dll" Alias _
"GetNamedSecurityInfoA" _
(ByVal ObjName As String, _
ByVal SE_OBJECT_TYPE As Long, _
ByVal SecInfo As Long, _
ByVal pSid As Long, _
ByVal pSidGroup As Long, _
pDacl As Long, _
ByVal pSacl As Long, _
pSecurityDescriptor As Long) As Long

Private Declare Function SetNamedSecurityInfo Lib "Advapi32.dll" Alias _
"SetNamedSecurityInfoA" _
(ByVal ObjName As String, _
ByVal SE_OBJECT As Long, _
ByVal SecInfo As Long, _
ByVal pSid As Long, _
ByVal pSidGroup As Long, _
ByVal pDacl As Long, _
ByVal pSacl As Long) As Long

Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long

Private Sub Command1_Click()

Dim result As Long
Dim pSecDesc As Long
Dim ea As EXPLICIT_ACCESS
Dim pNewDACL As Long
Dim pOldDACL As Long

' Get the DACL information of the folder using GetNamedSecurityInfo() API.
' SE_FILE_OBJECT constant says that the named securable object is a file or folder
result = GetNamedSecurityInfo(FOLDER_PATH, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, 0&, 0&, pOldDACL, 0&, pSecDesc)
If result = ERROR_SUCCESS Then

' Construct an EXPLICIT_ACCESS structure for Everyone with GENERIC_ALL access that will apply for c:/test1
' as well as subfolder and files using BuildExplicitAccessWithName() API
BuildExplicitAccessWithName ea, "EVERYONE", GENERIC_ALL, SET_ACCESS, CONTAINER_INHERIT_ACE Or OBJECT_INHERIT_ACE

' Merge constructed EXPLICIT_ACCESS structure to the existing DACL and get an updated DACL in memory from
' SetEntriesInAcl() API
result = SetEntriesInAcl(1, ea, pOldDACL, pNewDACL)
If result = ERROR_SUCCESS Then
MsgBox "SetEntriesInAcl succeeded"

' Call SetNamedSecurityInfo() API with the updated DACL in memory to change the DACL of c:/test folder
result = SetNamedSecurityInfo(FOLDER_PATH, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, 0&, 0&, pNewDACL, 0&)
If result = ERROR_SUCCESS Then
MsgBox "SetNamedSecurityInfo succeeded"
Else
MsgBox "SetNamedSecurityInfo failed with error code : " & result
End If

' Free the memory allocated for the new DACL by the SetEntriesInAcl() API, using LocalFree() API
LocalFree pNewDACL
Else
MsgBox "SetEntriesInAcl failed with error code : " & result
End If

' Free the memory allocated for the security descriptor by the GetNamedSecurityInfo() API, using LocalFree() API
LocalFree pSecDesc
Else
MsgBox "GetNamedSecurityInfo failed with error code : " & result
End If
End Sub

分享到:
评论

相关推荐

    windows文件及文件夹权限管理

    如想要添加一个文件或文件夹访问用户并为其设置权限的话,其实在.NET中一切的操作和编程变的非常的简单而明了。本例就是解决此问题的C#实例。稍做修改即可作为VB之用。

    用VB对局域网服务器用户及主目录的设置.pdf

    在本程序中,先用VB程序构造“用户名”字符串,然后创建批处理文件,文件内容代码由程序自动添写,最后由VB调用批处理文件完成设置。在批处理文件中的命令如“Net Use”和“Cacls”等取自网络操作系统的网络管理命令...

    VB连接access数据库实例

    - 确保Access数据库和VB应用程序在同一台计算机上运行,或正确配置网络访问权限。 - 错误处理是必要的,以应对可能的连接问题或查询错误。 总结,VB连接Access数据库涉及创建数据库、配置ODBC数据源,以及使用ADO...

    易语言菜鸟问答.docx

    15. 如何取得当前程序所在的文件夹名称? 使用“取程序路径”命令,再截取到文件名前的路径即可。 16. 如何在运行时创建与程序同名的ini文件? 先使用“取程序路径”得到程序所在路径,然后拼接文件名,最后使用...

    实操试卷E卷1

    这部分要求考生编写两个VB程序: 1. 打开VB1.vbp文件,设计一个界面,当点击提交按钮时,将表单内的所有内容显示在Label上。项目文件应保存在VB1文件夹内。 2. 打开VB2.vbp文件,设计一个界面,用户在Text1中输入...

    Bin 和 App_Code 文件夹介绍

    这样的配置使得VBCode和CSCode子文件夹分别编译为独立的程序集,允许在同一Web应用中混合使用多种编程语言的源代码。 总结来说,Bin和App_Code文件夹在ASP.NET中提供了代码管理和组织的灵活性,帮助开发者更高效地...

    程序的打包问题示例(一个简单说明)

    以上就是VB.NET程序打包的基本步骤,包括创建应用程序、生成安装项目、添加应用内容、设置快捷方式、文件关联和注册表项。实际操作时,根据项目的具体需求,可能需要进行更多自定义设置,如设置许可协议、添加卸载...

    E:\新建文件夹\其它\控件

    在VB.NET 2005中,我们可以使用`System.Net`命名空间中的`FtpWebRequest`和`FtpWebResponse`类来实现FTP操作。 2. 文件下载: 下载文件主要涉及创建一个`FtpWebRequest`对象,设置其属性(如URL、方法、凭据等),...

    windows超级命令

    如果是默认的NTFS权限设置,即使是以管理员身份运行的程序,也需要使用相当多的代码来让自己拥有权限,修改相关文件。 Win8的WindowsApps文件夹是一个典型的例子。如果你修改权限后,没有改回去,就会有打不开Apps...

    WindowsServer2008R2中文版中.pdf

    这通常包括用户需要在远程环境下使用的各种程序,例如AutoCAD 2002、Office、VC、VB等。在控制面板的“程序”部分,选择“在远程桌面服务器上安装应用程序”,按照图4至图7的步骤,插入安装介质,以传统方式安装应用...

    信息技术选修VB试卷[无答案]9.pdf

    4. 共享文件夹:网络中的文件夹共享可以方便多用户访问,但可以设定访问权限和用户数量限制。本地共享文件夹则限于同一台计算机的用户间共享。 5. 数据库概念:数据库中的表可以包含多个字段(列),每个字段有一行...

    ExcelVBA程序设计.doc

    第五课 利用VBA设置工作表使用权限 15 1.使用WITH语句。 17 2.使用对象变量。 17 方法3:减少对象的激活和选择 17 方法4:关闭屏幕更新 18 第六课 提高EXCEL中VBA的效率 19 方法1:尽量使用VBA原有的属性、方法和...

    郑州大学包装在线

    5)如果你使用的是 NTFS 格式的磁盘,请注意进行权限设置: 以下给出最严格的权限设置: (当然你可以采用比这些更为宽松的权限设置) D:pack Administrators 允许:完全控制 aspnet_wp 允许:读取及运行...

    Excel_VBA教程

    第五课 利用VBA设置工作表使用权限 15 1.使用WITH语句。 17 2.使用对象变量。 17 方法3:减少对象的激活和选择 17 方法4:关闭屏幕更新 18 第六课 提高EXCEL中VBA的效率 19 方法1:尽量使用VBA原有的属性、方法和...

    Aspnet2.0新教程课件

    2. **应用程序文件夹**: - **App_Browsers**: 包含针对不同浏览器的定义文件,帮助ASP.NET识别浏览器特性和功能。 - **App_Code**: 这里存放源代码文件,如实用工具类和业务对象,会在首次请求时被动态编译为应用...

    简单的从数码相机中导出照片的程序

    其实这个东西我的思路很简单粗暴;当数码相机链接电脑后就成了一个存储器,会出现一个类似于U盘的...这个为源文件,没权限、商业和技术秘密,用VB.NET编写。不过我还没加入进度条,不大会弄,希望大家可以点的意见。

Global site tag (gtag.js) - Google Analytics