找回密码
 加入
搜索
查看: 4482|回复: 5

[系统综合] lsasecur.au3中函数- 获取NTFS文件的安全信息用户账号有异常[已解决问题]

[复制链接]
发表于 2011-12-29 16:50:35 | 显示全部楼层 |阅读模式
本帖最后由 qqgghh1 于 2012-1-4 09:10 编辑

如题,我在使用此功能实现判断NTFS分区中【users】用户权限是否为完全控制。
但_ArrayDisplay($aList, $sOwner)查询中会出现多个相同用户,不知为何,在其它系统里也会有这种问题。以至无法继续分析利用下去
#include <lsasecur.au3>
$sFilePath = "D:" ;以判断D盘为例
$iSecur = BitOR($SE_INFO_OWNER, $SE_INFO_DACL)
$pSecur = _SeGetFileSecurity($sFilePath, $iSecur)
 
If ($pSecur = 0) Then
        MsgBox(48, "Error", _SeFormatMsg("_SeGetFileSecurity"))
        Exit
EndIf
 
$pOwner = _SeGetSecurityDescriptorOwner($pSecur)
$pDacl = _SeGetSecurityDescriptorDacl($pSecur)
 
$sOwner = _SeLookupAccountSid($pOwner)
$aList = _SeEnumEntriesFromAcl($pDacl)
 
_ArrayDisplay($aList, $sOwner)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-12-30 08:35:46 | 显示全部楼层
晕,2L小心再被扣分
 楼主| 发表于 2011-12-30 08:36:20 | 显示全部楼层
晕,2L小心再被扣分
 楼主| 发表于 2011-12-30 17:47:36 | 显示全部楼层
本帖最后由 qqgghh1 于 2011-12-30 17:53 编辑

呵呵,自己搞定。这段代码的目的是为了检测用户电脑各分区USERS账号是否有完全控制,如果没有的话,用USERS账号登陆可能无法正常使用电脑
#RequireAdmin
#include <lsasecur.au3>
Local $var = DriveGetDrive( "fixed" )
Local $Remind = "",$j
If NOT @error Then
        For $i = 1 to $var[0]
                If DriveGetFileSystem($var[$i]) <> "NTFS" Then
                        $Remind = $Remind&@CRLF&$var[$i]&"分区不是NTFS格式,建议使用convert命令将其转换成NTFS格式"
                Else
                        If $var[$i] <> @HomeDrive Then 
                                checkaccess($var[$i])
                                If $j = 0  Then $Remind= $Remind&@CRLF&$var[$i]&"分区,users无完全控制权限,【强烈建议】手动添加权限"
                        EndIf
                EndIf
    Next
        MsgBox(48,"请务必阅读!",$Remind)
EndIf

Func checkaccess($sFilePath)
        $j = 0 
        $iSecur = BitOR($SE_INFO_OWNER, $SE_INFO_DACL)
        $pSecur = _SeGetFileSecurity($sFilePath, $iSecur)
        If ($pSecur = 0) Then
                MsgBox(48, "Error", _SeFormatMsg("_SeGetFileSecurity"))
                Exit
        EndIf
        $pOwner = _SeGetSecurityDescriptorOwner($pSecur)
        $pDacl = _SeGetSecurityDescriptorDacl($pSecur)
        $sOwner = _SeLookupAccountSid($pOwner)
        $aList = _SeEnumEntriesFromAcl($pDacl)
        For $i = 1 To $aList[0][0]
                If $aList[$i][0] = "BUILTIN\Users" And $aList[$i][2] = 0x001F01FF Then $j = 1
        Next
        Return $j
EndFunc

#cs
$test = _DriveGetDrive('FIXED') ;返回本地硬盘
_ArrayDisplay($test, '本地硬盘')
;$test = _DriveGetDrive('FIXED', 0) ;返回USB移动硬盘
;_ArrayDisplay($test, 'USB移动硬盘')

Func _DriveGetDrive($type, $flag = 1)
        ;$flag = 1 返回本地设备;$flag = 0 返回USB移动设备
        Local $aDisk[1] = [0], $i
        Local $aDrive = DriveGetDrive($type)
        For $i = 1 To $aDrive[0]
                If $flag = 0 And _WinAPI_GetDriveBusType($aDrive[$i]) = 7 Then
                        _ArrayAdd($aDisk, StringUpper($aDrive[$i]))
                        $aDisk[0] += 1
                ElseIf $flag = 1 And _WinAPI_GetDriveBusType($aDrive[$i]) <> 7 Then
                        _ArrayAdd($aDisk, StringUpper($aDrive[$i]))
                        $aDisk[0] += 1
                EndIf
        Next
        Return $aDisk
EndFunc   ;==>_DriveGetDrive  将移动硬盘从fixed中区分出来
#ce
发表于 2012-2-1 18:26:12 | 显示全部楼层
学习一下先,                  
发表于 2014-5-4 10:38:22 | 显示全部楼层
雷锋精神传天下!谢谢分享!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 11:56 , Processed in 0.094156 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表