VB取得磁盘文件夹或文件的security
来源:互联网 发布:济南php招聘 编辑:程序博客网 时间:2024/06/18 15:36
Option Explicit
Public Const MAXIMUM_ALLOWED As Long = &H2000000
Public Const DELETE As Long = &H10000
Public Const READ_CONTROL As Long = &H20000
Public Const WRITE_DAC As Long = &H40000
Public Const WRITE_OWNER As Long = &H80000
Public Const SYNCHRONIZE As Long = &H100000
Public Const STANDARD_RIGHTS_READ As Long = READ_CONTROL
Public Const STANDARD_RIGHTS_WRITE As Long = READ_CONTROL
Public Const STANDARD_RIGHTS_EXECUTE As Long = READ_CONTROL
Public Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Public Const FILE_READ_DATA As Long = &H1
Public Const FILE_LIST_DIRECTORY As Long = &H1
Public Const FILE_ADD_FILE As Long = &H2
Public Const FILE_WRITE_DATA As Long = &H2
Public Const FILE_CREATE_PIPE_INSTANCE As Long = &H4
Public Const FILE_ADD_SUBDIRECTORY As Long = &H4
Public Const FILE_APPEND_DATA As Long = &H4
Public Const FILE_READ_EA As Long = &H8
Public Const FILE_READ_PROPERTIES As Long = FILE_READ_EA
Public Const FILE_WRITE_EA As Long = &H10
Public Const FILE_WRITE_PROPERTIES As Long = FILE_WRITE_EA
Public Const FILE_EXECUTE As Long = &H20
Public Const FILE_TRAVERSE As Long = &H20
Public Const FILE_DELETE_CHILD As Long = &H40
Public Const FILE_READ_ATTRIBUTES As Long = &H80
Public Const FILE_WRITE_ATTRIBUTES As Long = &H100
Public Const FILE_GENERIC_READ As Long = (STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or FILE_READ_EA Or FILE_EXECUTE Or STANDARD_RIGHTS_EXECUTE Or SYNCHRONIZE)
Public Const FILE_GENERIC_READ As Long = (STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or FILE_READ_EA Or SYNCHRONIZE)
Public Const FILE_GENERIC_EXECUTE As Long = (STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE)
Public Const FILE_GENERIC_WRITE As Long = (STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE)
Public Const FILE_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H1FF&)
Public Const GENERIC_READ As Long = &H80000000
Public Const GENERIC_WRITE As Long = &H40000000
Public Const GENERIC_EXECUTE As Long = &H20000000
Public Const GENERIC_ALL As Long = &H10000000
' Types, constants and functions to work with access rights
Public Const OWNER_SECURITY_INFORMATION As Long = &H1
Public Const GROUP_SECURITY_INFORMATION As Long = &H2
Public Const DACL_SECURITY_INFORMATION As Long = &H4
Public Const TOKEN_QUERY As Long = 8
Public Const SecurityImpersonation As Integer = 3
Public Const ANYSIZE_ARRAY = 1
Public Const ACEListDirectory = 1
Public Const ACEReadData = 1
Public Const ACECreateFiles = 2
Public Const ACEWriteData = 2
Public Const ACECreateDirectories = 4
Public Const ACEAppendData = 4
Public Const ACEReadExtendedAttributes = 8
Public Const ACEWriteExtendedAttributes = 16
Public Const ACEExecuteFile = 32
Public Const ACETraverse = 32
Public Const ACEDeleteSubdirectoriesAndFiles = 64
Public Const ACEReadAttributes = 128
Public Const ACEWriteAttributes = 256
'Public Const ACEWrite = 278
Public Const ACEDelete = 65536
Public Const ACEReadPermissions = 131072
'Public Const ACERead = 131209
'Public Const ACEReadAndExecute = 131241
'Public Const ACEModify = 197055
Public Const ACEChangePermissions = 262144
Public Const ACETakeOwnership = 524288
Public Const ACESynchronize = 1048576
'Public Const ACEFullControl = 2032127
Public Type GENERIC_MAPPING
GenericRead As Long
GenericWrite As Long
GenericExecute As Long
GenericAll As Long
End Type
Public Type LUID
LowPart As Long
HighPart As Long
End Type
Public Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Public Type PRIVILEGE_SET
PrivilegeCount As Long
Control As Long
Privilege(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Public Declare Function GetFileSecurity Lib "advapi32.dll" Alias "GetFileSecurityA" (ByVal lpFileName As String,ByVal RequestedInformation As Long, pSecurityDescriptor As Byte,ByVal nLength As Long, lpnLengthNeeded As Long) As Long
Public Declare Function AccessCheck Lib "advapi32.dll" (pSecurityDescriptor As Byte, ByVal ClientToken As Long,ByVal DesiredAccess As Long, GenericMapping As GENERIC_MAPPING,PrivilegeSet As PRIVILEGE_SET, PrivilegeSetLength As Long, GrantedAccess As Long, Status As Long) As Long
Public Declare Function ImpersonateSelf Lib "advapi32.dll" (ByVal ImpersonationLevel As Integer) As Long
Public Declare Function RevertToSelf Lib "advapi32.dll" () As Long
Public Declare Sub MapGenericMask Lib "advapi32.dll" (AccessMask As Long,GenericMapping As GENERIC_MAPPING)
Public Declare Function OpenThreadToken Lib "advapi32.dll"(ByVal ThreadHandle As Long, ByVal DesiredAccess As Long,ByVal OpenAsSelf As Long, TokenHandle As Long) As Long
Public Declare Function GetCurrentThread Lib "kernel32" () As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Public Const VER_PLATFORM_WIN32_NT As Long = 2
Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Public Const FS_PERSISTENT_ACLS As Long = &H8
Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String,ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long,lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String,ByVal nFileSystemNameSize As Long) As Long
’检查文件的访问权限
Public Function CheckFileAccess(fileName As String, ByVal DesiredAccess As Long) As Long
Dim r As Long, SecDesc() As Byte, SDSize As Long, hToken As Long
Dim PrivSet As PRIVILEGE_SET, GenMap As GENERIC_MAPPING
Dim Volume As String, FSFlags As Long
If Not IsNT() Then
CheckFileAccess = -1
Exit Function
End If
If Left$(fileName, 2) = "//" Then
r = InStr(3, fileName, "/")
If r = 0 Then
Volume = fileName & "/"
Else
Volume = Left$(fileName, r)
End If
ElseIf Mid$(fileName, 2, 2) = ":/" Then
Volume = Left$(fileName, 3)
End If
GetVolumeInformation Volume, vbNullString, 0, ByVal 0&, _
ByVal 0&, FSFlags, vbNullString, 0
If (FSFlags And FS_PERSISTENT_ACLS) = 0 Then
CheckFileAccess = -1
Exit Function
End If
GetFileSecurity fileName, OWNER_SECURITY_INFORMATION Or GROUP_SECURITY_INFORMATION Or DACL_SECURITY_INFORMATION, 0, 0, SDSize
If Err.LastDllError <> 122 Then
CheckFileAccess = -1 'Rights not supported. Returning -1.
Exit Function
End If
If SDSize = 0 Then Exit Function
ReDim SecDesc(1 To SDSize)
If GetFileSecurity(fileName, OWNER_SECURITY_INFORMATION _
Or GROUP_SECURITY_INFORMATION _
Or DACL_SECURITY_INFORMATION, _
SecDesc(1), SDSize, SDSize) = 0 Then
Exit Function
End If
ImpersonateSelf SecurityImpersonation 'Adding Impersonation Token for thread
OpenThreadToken GetCurrentThread(), TOKEN_QUERY, 0, hToken 'Opening of Token of current thread
If hToken <> 0 Then
GenMap.GenericRead = FILE_GENERIC_READ
GenMap.GenericWrite = FILE_GENERIC_WRITE
GenMap.GenericExecute = FILE_GENERIC_EXECUTE
GenMap.GenericAll = FILE_ALL_ACCESS
MapGenericMask DesiredAccess, GenMap
AccessCheck SecDesc(1), hToken, DesiredAccess, GenMap, PrivSet, Len(PrivSet), CheckFileAccess, r
CloseHandle hToken
End If
RevertToSelf
End Function
Public Const MAXIMUM_ALLOWED As Long = &H2000000
Public Const DELETE As Long = &H10000
Public Const READ_CONTROL As Long = &H20000
Public Const WRITE_DAC As Long = &H40000
Public Const WRITE_OWNER As Long = &H80000
Public Const SYNCHRONIZE As Long = &H100000
Public Const STANDARD_RIGHTS_READ As Long = READ_CONTROL
Public Const STANDARD_RIGHTS_WRITE As Long = READ_CONTROL
Public Const STANDARD_RIGHTS_EXECUTE As Long = READ_CONTROL
Public Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Public Const FILE_READ_DATA As Long = &H1
Public Const FILE_LIST_DIRECTORY As Long = &H1
Public Const FILE_ADD_FILE As Long = &H2
Public Const FILE_WRITE_DATA As Long = &H2
Public Const FILE_CREATE_PIPE_INSTANCE As Long = &H4
Public Const FILE_ADD_SUBDIRECTORY As Long = &H4
Public Const FILE_APPEND_DATA As Long = &H4
Public Const FILE_READ_EA As Long = &H8
Public Const FILE_READ_PROPERTIES As Long = FILE_READ_EA
Public Const FILE_WRITE_EA As Long = &H10
Public Const FILE_WRITE_PROPERTIES As Long = FILE_WRITE_EA
Public Const FILE_EXECUTE As Long = &H20
Public Const FILE_TRAVERSE As Long = &H20
Public Const FILE_DELETE_CHILD As Long = &H40
Public Const FILE_READ_ATTRIBUTES As Long = &H80
Public Const FILE_WRITE_ATTRIBUTES As Long = &H100
Public Const FILE_GENERIC_READ As Long = (STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or FILE_READ_EA Or FILE_EXECUTE Or STANDARD_RIGHTS_EXECUTE Or SYNCHRONIZE)
Public Const FILE_GENERIC_READ As Long = (STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or FILE_READ_EA Or SYNCHRONIZE)
Public Const FILE_GENERIC_EXECUTE As Long = (STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE)
Public Const FILE_GENERIC_WRITE As Long = (STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE)
Public Const FILE_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H1FF&)
Public Const GENERIC_READ As Long = &H80000000
Public Const GENERIC_WRITE As Long = &H40000000
Public Const GENERIC_EXECUTE As Long = &H20000000
Public Const GENERIC_ALL As Long = &H10000000
' Types, constants and functions to work with access rights
Public Const OWNER_SECURITY_INFORMATION As Long = &H1
Public Const GROUP_SECURITY_INFORMATION As Long = &H2
Public Const DACL_SECURITY_INFORMATION As Long = &H4
Public Const TOKEN_QUERY As Long = 8
Public Const SecurityImpersonation As Integer = 3
Public Const ANYSIZE_ARRAY = 1
Public Const ACEListDirectory = 1
Public Const ACEReadData = 1
Public Const ACECreateFiles = 2
Public Const ACEWriteData = 2
Public Const ACECreateDirectories = 4
Public Const ACEAppendData = 4
Public Const ACEReadExtendedAttributes = 8
Public Const ACEWriteExtendedAttributes = 16
Public Const ACEExecuteFile = 32
Public Const ACETraverse = 32
Public Const ACEDeleteSubdirectoriesAndFiles = 64
Public Const ACEReadAttributes = 128
Public Const ACEWriteAttributes = 256
'Public Const ACEWrite = 278
Public Const ACEDelete = 65536
Public Const ACEReadPermissions = 131072
'Public Const ACERead = 131209
'Public Const ACEReadAndExecute = 131241
'Public Const ACEModify = 197055
Public Const ACEChangePermissions = 262144
Public Const ACETakeOwnership = 524288
Public Const ACESynchronize = 1048576
'Public Const ACEFullControl = 2032127
Public Type GENERIC_MAPPING
GenericRead As Long
GenericWrite As Long
GenericExecute As Long
GenericAll As Long
End Type
Public Type LUID
LowPart As Long
HighPart As Long
End Type
Public Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Public Type PRIVILEGE_SET
PrivilegeCount As Long
Control As Long
Privilege(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Public Declare Function GetFileSecurity Lib "advapi32.dll" Alias "GetFileSecurityA" (ByVal lpFileName As String,ByVal RequestedInformation As Long, pSecurityDescriptor As Byte,ByVal nLength As Long, lpnLengthNeeded As Long) As Long
Public Declare Function AccessCheck Lib "advapi32.dll" (pSecurityDescriptor As Byte, ByVal ClientToken As Long,ByVal DesiredAccess As Long, GenericMapping As GENERIC_MAPPING,PrivilegeSet As PRIVILEGE_SET, PrivilegeSetLength As Long, GrantedAccess As Long, Status As Long) As Long
Public Declare Function ImpersonateSelf Lib "advapi32.dll" (ByVal ImpersonationLevel As Integer) As Long
Public Declare Function RevertToSelf Lib "advapi32.dll" () As Long
Public Declare Sub MapGenericMask Lib "advapi32.dll" (AccessMask As Long,GenericMapping As GENERIC_MAPPING)
Public Declare Function OpenThreadToken Lib "advapi32.dll"(ByVal ThreadHandle As Long, ByVal DesiredAccess As Long,ByVal OpenAsSelf As Long, TokenHandle As Long) As Long
Public Declare Function GetCurrentThread Lib "kernel32" () As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Public Const VER_PLATFORM_WIN32_NT As Long = 2
Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Public Const FS_PERSISTENT_ACLS As Long = &H8
Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String,ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long,lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String,ByVal nFileSystemNameSize As Long) As Long
’检查文件的访问权限
Public Function CheckFileAccess(fileName As String, ByVal DesiredAccess As Long) As Long
Dim r As Long, SecDesc() As Byte, SDSize As Long, hToken As Long
Dim PrivSet As PRIVILEGE_SET, GenMap As GENERIC_MAPPING
Dim Volume As String, FSFlags As Long
If Not IsNT() Then
CheckFileAccess = -1
Exit Function
End If
If Left$(fileName, 2) = "//" Then
r = InStr(3, fileName, "/")
If r = 0 Then
Volume = fileName & "/"
Else
Volume = Left$(fileName, r)
End If
ElseIf Mid$(fileName, 2, 2) = ":/" Then
Volume = Left$(fileName, 3)
End If
GetVolumeInformation Volume, vbNullString, 0, ByVal 0&, _
ByVal 0&, FSFlags, vbNullString, 0
If (FSFlags And FS_PERSISTENT_ACLS) = 0 Then
CheckFileAccess = -1
Exit Function
End If
GetFileSecurity fileName, OWNER_SECURITY_INFORMATION Or GROUP_SECURITY_INFORMATION Or DACL_SECURITY_INFORMATION, 0, 0, SDSize
If Err.LastDllError <> 122 Then
CheckFileAccess = -1 'Rights not supported. Returning -1.
Exit Function
End If
If SDSize = 0 Then Exit Function
ReDim SecDesc(1 To SDSize)
If GetFileSecurity(fileName, OWNER_SECURITY_INFORMATION _
Or GROUP_SECURITY_INFORMATION _
Or DACL_SECURITY_INFORMATION, _
SecDesc(1), SDSize, SDSize) = 0 Then
Exit Function
End If
ImpersonateSelf SecurityImpersonation 'Adding Impersonation Token for thread
OpenThreadToken GetCurrentThread(), TOKEN_QUERY, 0, hToken 'Opening of Token of current thread
If hToken <> 0 Then
GenMap.GenericRead = FILE_GENERIC_READ
GenMap.GenericWrite = FILE_GENERIC_WRITE
GenMap.GenericExecute = FILE_GENERIC_EXECUTE
GenMap.GenericAll = FILE_ALL_ACCESS
MapGenericMask DesiredAccess, GenMap
AccessCheck SecDesc(1), hToken, DesiredAccess, GenMap, PrivSet, Len(PrivSet), CheckFileAccess, r
CloseHandle hToken
End If
RevertToSelf
End Function
- VB取得磁盘文件夹或文件的security
- 文件管理器--取得文件系统的可用大小,取得文件或文件夹的大小
- VB 磁盘信息,文件夹,文件操作
- du: 查询文件或文件夹的磁盘使用空间
- 取得文件所在磁盘的扇区大小
- java 取得文件、文件夹/ 目录 的 大小
- 无法删除文件、文件夹之无法读源文件或磁盘
- VB如何执行命令 打开资源管理器 并选择指定的文件夹或文件
- java遍历磁盘或文件夹
- 文件、文件夹、磁盘操作
- “无法删除 文件:无法读源文件或磁盘”-文件夹无法删除的最终而有效的解决方法
- 关于复制文件或文件夹时提示没有足够的可用磁盘空间的解决办法-释放磁盘空间,磁盘整理
- 无法删除文件,无法读源文件或磁盘:U盘文件夹乱码无法删除的原因及解决方案...
- win 2003 文件夹 文件 拒绝访问 无法访问 终极解决方法 您无权查看或编辑目前 的权限设置;但是,您可以取得所有权或更改审核设置
- vb 多级路径创建,读取文件或文件夹[vb类写法]
- 取得文件夹下的所有文件的文件名和文件大小
- 取得磁盘符号的方法
- 取得磁盘符号的方法
- 获得最近插入的ID:
- 【征集】我们上大学到底为了什么?到底学到了什么?
- 广州FB会之12月5日WebSphere技术专家沙龙广州站
- 笔记081120----PL/SQL
- JDK 配置
- VB取得磁盘文件夹或文件的security
- 重构
- Pet shop的设计模式与体系结构
- Java中如何由枚举常量的ordinal值获得枚举常量对象
- Corporate Portals Empowered with XML and Web Services
- 在这个“寒冬”来临之前,旗忠村拿出了一亿元巨款分给了村民。
- 我需要改变点什么。。。
- Wardriving & Wireless Penetration Testing
- Data Structures and Algorithms Using Visual Basic.NET