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
|
相关推荐
如想要添加一个文件或文件夹访问用户并为其设置权限的话,其实在.NET中一切的操作和编程变的非常的简单而明了。本例就是解决此问题的C#实例。稍做修改即可作为VB之用。
在本程序中,先用VB程序构造“用户名”字符串,然后创建批处理文件,文件内容代码由程序自动添写,最后由VB调用批处理文件完成设置。在批处理文件中的命令如“Net Use”和“Cacls”等取自网络操作系统的网络管理命令...
- 确保Access数据库和VB应用程序在同一台计算机上运行,或正确配置网络访问权限。 - 错误处理是必要的,以应对可能的连接问题或查询错误。 总结,VB连接Access数据库涉及创建数据库、配置ODBC数据源,以及使用ADO...
15. 如何取得当前程序所在的文件夹名称? 使用“取程序路径”命令,再截取到文件名前的路径即可。 16. 如何在运行时创建与程序同名的ini文件? 先使用“取程序路径”得到程序所在路径,然后拼接文件名,最后使用...
这部分要求考生编写两个VB程序: 1. 打开VB1.vbp文件,设计一个界面,当点击提交按钮时,将表单内的所有内容显示在Label上。项目文件应保存在VB1文件夹内。 2. 打开VB2.vbp文件,设计一个界面,用户在Text1中输入...
这样的配置使得VBCode和CSCode子文件夹分别编译为独立的程序集,允许在同一Web应用中混合使用多种编程语言的源代码。 总结来说,Bin和App_Code文件夹在ASP.NET中提供了代码管理和组织的灵活性,帮助开发者更高效地...
以上就是VB.NET程序打包的基本步骤,包括创建应用程序、生成安装项目、添加应用内容、设置快捷方式、文件关联和注册表项。实际操作时,根据项目的具体需求,可能需要进行更多自定义设置,如设置许可协议、添加卸载...
在VB.NET 2005中,我们可以使用`System.Net`命名空间中的`FtpWebRequest`和`FtpWebResponse`类来实现FTP操作。 2. 文件下载: 下载文件主要涉及创建一个`FtpWebRequest`对象,设置其属性(如URL、方法、凭据等),...
如果是默认的NTFS权限设置,即使是以管理员身份运行的程序,也需要使用相当多的代码来让自己拥有权限,修改相关文件。 Win8的WindowsApps文件夹是一个典型的例子。如果你修改权限后,没有改回去,就会有打不开Apps...
这通常包括用户需要在远程环境下使用的各种程序,例如AutoCAD 2002、Office、VC、VB等。在控制面板的“程序”部分,选择“在远程桌面服务器上安装应用程序”,按照图4至图7的步骤,插入安装介质,以传统方式安装应用...
4. 共享文件夹:网络中的文件夹共享可以方便多用户访问,但可以设定访问权限和用户数量限制。本地共享文件夹则限于同一台计算机的用户间共享。 5. 数据库概念:数据库中的表可以包含多个字段(列),每个字段有一行...
第五课 利用VBA设置工作表使用权限 15 1.使用WITH语句。 17 2.使用对象变量。 17 方法3:减少对象的激活和选择 17 方法4:关闭屏幕更新 18 第六课 提高EXCEL中VBA的效率 19 方法1:尽量使用VBA原有的属性、方法和...
5)如果你使用的是 NTFS 格式的磁盘,请注意进行权限设置: 以下给出最严格的权限设置: (当然你可以采用比这些更为宽松的权限设置) D:pack Administrators 允许:完全控制 aspnet_wp 允许:读取及运行...
第五课 利用VBA设置工作表使用权限 15 1.使用WITH语句。 17 2.使用对象变量。 17 方法3:减少对象的激活和选择 17 方法4:关闭屏幕更新 18 第六课 提高EXCEL中VBA的效率 19 方法1:尽量使用VBA原有的属性、方法和...
2. **应用程序文件夹**: - **App_Browsers**: 包含针对不同浏览器的定义文件,帮助ASP.NET识别浏览器特性和功能。 - **App_Code**: 这里存放源代码文件,如实用工具类和业务对象,会在首次请求时被动态编译为应用...
其实这个东西我的思路很简单粗暴;当数码相机链接电脑后就成了一个存储器,会出现一个类似于U盘的...这个为源文件,没权限、商业和技术秘密,用VB.NET编写。不过我还没加入进度条,不大会弄,希望大家可以点的意见。