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

?如何用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

分享到:
评论

相关推荐

    文件及文件夹权限设置(vb.net)

    以上就是关于VB.NET中文件和文件夹权限设置的一些关键知识点。通过理解和运用这些概念,开发者可以构建更安全、更可控的应用程序。在实际项目中,确保正确设置权限是确保数据安全性和系统稳定性的重要步骤。

    用vb来给文件夹上锁和解锁

    在VB(Visual Basic)编程环境中,我们可以利用操作系统提供的API(应用程序接口)函数来实现文件夹的加锁和解锁功能。这个过程涉及到文件系统的权限管理,以及对文件或文件夹属性的修改。以下将详细讲解如何使用VB...

    自定义文件夹图标(VB源代码)

    VB程序需要正确处理权限请求,以确保操作的合法性。 5. **错误处理**:在执行以上操作时,可能会遇到各种错误,如文件不存在、无权限等。因此,VB源代码需要包含适当的错误处理机制,以确保程序的稳定性和用户体验...

    vb文件夹锁定解锁源码

    首先,VB中的文件夹操作主要依赖于操作系统提供的API(应用程序接口)。锁定文件夹的目的是防止其他程序或用户对特定文件夹的访问,而解锁则是恢复其正常可读写状态。以下是一些关键的API函数: 1. **LockFile** 和...

    文件夹锁定解锁示例VB源码

    【文件夹锁定解锁示例VB源码】是一个基于Visual Basic(VB)开发的应用程序,它提供了对文件夹进行加锁和解锁的功能。VB是Microsoft公司推出的一种面向对象的编程语言,以其直观的语法和丰富的控件库而广受欢迎,...

    VB.NET 多线程列出文件夹大小

    总结,"VB.NET 多线程列出文件夹大小"项目结合了多线程、文件系统操作、UI控件使用等技术,旨在高效且用户友好地呈现文件夹的大小信息。在实践中,需要考虑线程管理、错误处理和用户体验优化,以确保程序的稳定性和...

    一个vb遍历文件夹的代码

    在给定的标题“一个vb遍历文件夹的代码”和描述中,我们可以推断这是一个用VB编写的程序,它的主要功能是遍历指定路径下的文件夹结构。下面我们将详细讨论如何在VB中实现这一功能,以及可能涉及的关键知识点。 首先...

    创建和删除文件夹程序(VB6.0代码编写)

    在VB6.0中,创建和删除文件夹是常见的文件系统操作,对于开发涉及文件管理的应用程序至关重要。VB6.0提供了丰富的API函数和对象,使得程序员能够方便地执行这些任务。下面我们将深入探讨如何使用VB6.0来创建和删除...

    VB 复制文件夹

    在VB(Visual Basic)编程中,复制文件夹是一项常见的任务,尤其在开发系统备份、数据迁移或安装程序时。要实现这一功能,VB提供了多种方法,包括使用FileSystemObject(FSO)或者API函数。下面我们将深入探讨这两种...

    VB文件名批量修改程序

    通过编写VB程序,我们可以实现自定义的命名规则,如添加日期、序列号或者替换特定字符串等。以下将详细介绍如何使用VB进行文件名批量修改。 1. **基本概念**: - **VB语言**:Visual Basic 提供了一个直观的图形化...

    复制、删除、移动一个文件夹下所有的文件和文件夹

    本教程将详细讲解如何使用Visual Basic 6.0(VB6)通过API(应用程序接口)函数来实现这些功能,尤其针对一个文件夹下所有文件和子文件夹的操作。 首先,API函数是操作系统提供的功能接口,允许程序员调用操作系统...

    定时关机 vb程序 开始时设置关机时间。

    标题中的“定时关机 vb程序 开始时设置关机时间”揭示了这是一个使用Visual Basic (VB)编程语言编写的程序,其主要功能是允许用户设置一个特定的时间来自动关闭计算机。VB是一种流行的事件驱动编程环境,由微软开发...

    VB中判断本地服务器上的文件夹是否存在

    为解决这个问题,可以尝试提升应用程序的权限或者确保用户具有足够的权限访问目标文件夹。 在进行这类操作时,良好的错误处理也是关键。可以添加`On Error`语句来捕获并处理可能出现的异常,例如: ```vb On Error...

    VB源码 文件夹浏览

    在VB(Visual Basic)编程环境中,文件夹浏览是一项常见的功能,它允许用户在应用程序中查看、选择或操作文件系统中的目录。本篇将详细讲解如何使用VB实现文件夹浏览的相关知识点。 1. **对话框控件**: 在VB中,...

    更改文件夹属性程序(VB6.0代码编写)

    在VB6.0环境下,开发一个能够更改文件夹属性的程序是一项常见的编程任务。...通过理解这些基本概念和API的使用,你可以创建更复杂的程序,例如批量更改多个文件夹的属性,或者根据特定条件动态设置属性。

    VB开发按日期建立文件夹

    创建文件夹的基本操作需要用到FileSystemObject,它是VBScript的组件,但在VB6或.NET Framework中的Visual Basic也可以使用。首先,需要引用Scripting Runtime库,然后创建FileSystemObject的实例: ```vb Imports ...

    简单小程序文件夹隐藏

    这个"简单小程序文件夹隐藏"是一个专为个人学习编程设计的应用,它可以帮助用户将特定的文件夹进行隐藏,防止未经授权的访问。下面我们将深入探讨这个主题,讲解相关知识点。 1. **文件夹隐藏的基本原理**: ...

    如何用vb创建一个不能删除,重命名,移动的文件夹?

    7. **程序的运行权限**:VB程序运行时需要有适当的权限才能修改文件属性。如果程序在没有管理员权限的用户账户下运行,可能无法设置高级权限。 8. **错误处理**:在实际编程中,应添加适当的错误处理机制,如`On ...

    VB 文件夹加密

    2. **加密过程**:在VB程序中,可以编写一个函数来读取文件夹内的所有文件,然后对每个文件进行加密。这通常涉及读取文件内容、应用加密算法、将加密后的数据写回文件等步骤。 3. **密钥管理**:加密的核心是密钥,...

    一个功能强大的VB文件夹枷锁,锁定功能。

    【标题】:VB文件夹锁定程序的开发与实现 在编程领域,VB(Visual Basic)是一种流行的编程语言,尤其在创建桌面应用程序时。本项目聚焦于一个基于VB的文件夹锁定工具,它允许用户保护其敏感数据,防止未经授权的...

Global site tag (gtag.js) - Google Analytics