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(Visual Basic)编程环境中,我们可以利用操作系统提供的API(应用程序接口)函数来实现文件夹的加锁和解锁功能。这个过程涉及到文件系统的权限管理,以及对文件或文件夹属性的修改。以下将详细讲解如何使用VB...
VB程序需要正确处理权限请求,以确保操作的合法性。 5. **错误处理**:在执行以上操作时,可能会遇到各种错误,如文件不存在、无权限等。因此,VB源代码需要包含适当的错误处理机制,以确保程序的稳定性和用户体验...
首先,VB中的文件夹操作主要依赖于操作系统提供的API(应用程序接口)。锁定文件夹的目的是防止其他程序或用户对特定文件夹的访问,而解锁则是恢复其正常可读写状态。以下是一些关键的API函数: 1. **LockFile** 和...
【文件夹锁定解锁示例VB源码】是一个基于Visual Basic(VB)开发的应用程序,它提供了对文件夹进行加锁和解锁的功能。VB是Microsoft公司推出的一种面向对象的编程语言,以其直观的语法和丰富的控件库而广受欢迎,...
总结,"VB.NET 多线程列出文件夹大小"项目结合了多线程、文件系统操作、UI控件使用等技术,旨在高效且用户友好地呈现文件夹的大小信息。在实践中,需要考虑线程管理、错误处理和用户体验优化,以确保程序的稳定性和...
在给定的标题“一个vb遍历文件夹的代码”和描述中,我们可以推断这是一个用VB编写的程序,它的主要功能是遍历指定路径下的文件夹结构。下面我们将详细讨论如何在VB中实现这一功能,以及可能涉及的关键知识点。 首先...
在VB6.0中,创建和删除文件夹是常见的文件系统操作,对于开发涉及文件管理的应用程序至关重要。VB6.0提供了丰富的API函数和对象,使得程序员能够方便地执行这些任务。下面我们将深入探讨如何使用VB6.0来创建和删除...
在VB(Visual Basic)编程中,复制文件夹是一项常见的任务,尤其在开发系统备份、数据迁移或安装程序时。要实现这一功能,VB提供了多种方法,包括使用FileSystemObject(FSO)或者API函数。下面我们将深入探讨这两种...
通过编写VB程序,我们可以实现自定义的命名规则,如添加日期、序列号或者替换特定字符串等。以下将详细介绍如何使用VB进行文件名批量修改。 1. **基本概念**: - **VB语言**:Visual Basic 提供了一个直观的图形化...
本教程将详细讲解如何使用Visual Basic 6.0(VB6)通过API(应用程序接口)函数来实现这些功能,尤其针对一个文件夹下所有文件和子文件夹的操作。 首先,API函数是操作系统提供的功能接口,允许程序员调用操作系统...
标题中的“定时关机 vb程序 开始时设置关机时间”揭示了这是一个使用Visual Basic (VB)编程语言编写的程序,其主要功能是允许用户设置一个特定的时间来自动关闭计算机。VB是一种流行的事件驱动编程环境,由微软开发...
为解决这个问题,可以尝试提升应用程序的权限或者确保用户具有足够的权限访问目标文件夹。 在进行这类操作时,良好的错误处理也是关键。可以添加`On Error`语句来捕获并处理可能出现的异常,例如: ```vb On Error...
在VB(Visual Basic)编程环境中,文件夹浏览是一项常见的功能,它允许用户在应用程序中查看、选择或操作文件系统中的目录。本篇将详细讲解如何使用VB实现文件夹浏览的相关知识点。 1. **对话框控件**: 在VB中,...
在VB6.0环境下,开发一个能够更改文件夹属性的程序是一项常见的编程任务。...通过理解这些基本概念和API的使用,你可以创建更复杂的程序,例如批量更改多个文件夹的属性,或者根据特定条件动态设置属性。
创建文件夹的基本操作需要用到FileSystemObject,它是VBScript的组件,但在VB6或.NET Framework中的Visual Basic也可以使用。首先,需要引用Scripting Runtime库,然后创建FileSystemObject的实例: ```vb Imports ...
这个"简单小程序文件夹隐藏"是一个专为个人学习编程设计的应用,它可以帮助用户将特定的文件夹进行隐藏,防止未经授权的访问。下面我们将深入探讨这个主题,讲解相关知识点。 1. **文件夹隐藏的基本原理**: ...
7. **程序的运行权限**:VB程序运行时需要有适当的权限才能修改文件属性。如果程序在没有管理员权限的用户账户下运行,可能无法设置高级权限。 8. **错误处理**:在实际编程中,应添加适当的错误处理机制,如`On ...
2. **加密过程**:在VB程序中,可以编写一个函数来读取文件夹内的所有文件,然后对每个文件进行加密。这通常涉及读取文件内容、应用加密算法、将加密后的数据写回文件等步骤。 3. **密钥管理**:加密的核心是密钥,...
【标题】:VB文件夹锁定程序的开发与实现 在编程领域,VB(Visual Basic)是一种流行的编程语言,尤其在创建桌面应用程序时。本项目聚焦于一个基于VB的文件夹锁定工具,它允许用户保护其敏感数据,防止未经授权的...