找回密码
 加入
搜索
查看: 2303|回复: 6

关于同名进程调试中的一个奇怪问题

[复制链接]
发表于 2009-9-18 08:02:17 | 显示全部楼层 |阅读模式
本帖最后由 boyhong 于 2009-9-18 08:42 编辑

感谢pusofalse afan 已对我进行的帮助,http://www.autoitx.com/forum.php?mod=viewthread&tid=9785
新发现了如下问题,感激不尽,实在想不明白。竟然运行出错~~能告诉我错在哪儿了吗?

#include <LocalSecurityAuthority.au3>
;ProcessWait("msiexec.exe")
Dim $aPriv[1][2] = [[$SE_DEBUG_NAME, 2]]
$hToken = _OpenProcessToken(-1)
_AdjustTokenPrivileges($hToken, $aPriv)
_LsaCloseHandle($hToken)
$aProcess = ProcessList("svchost.exe")
;$aProcess = ProcessList("msiexec.exe")
For $i = 1 to $aProcess[0][0]
        $hProcess = _OpenProcess($aProcess[$i][1], $READ_CONTROL)
        $sOwner = _QueryKernelObjectSecurityOwner($hProcess)
        If $sOwner = "Builtin\Administrators" Then $sOwner = "NT AUTHORITY\SYSTEM"
        _LsaCloseHandle($hProcess)
                $sOwnertest = StringSplit($sOwner,"\",1)
                MsgBox(64,"",$sOwnertest[2])
                MsgBox(64,"","当前用户是:"&@UserName)
                ;If ($sOwnertest[2]= @UserName) Then ProcessClose ($aProcess[$i][1])
                ;EndIf
Next
发表于 2009-9-18 08:34:20 | 显示全部楼层
$sOwnertest[2]超出数组范围引发的错误,根本原因是因为_QueryKernelObjectSecurityOwner没有返回一个有效的用户名字符串。svchost.exe进程很奇怪,即使提升权限了,但还是拒绝访问,因为属于NT AUTHORITY\NETWORK SERVICE或LOCAL SERVICE的缘故吧。解决方法?
把标题改好之后告诉你,或者你自己再调试下。
 楼主| 发表于 2009-9-18 08:50:25 | 显示全部楼层
刚发现若不拆分字符串。。直接:
Msgbox(0, $aProcess[$i][1], $sOwner)竟然可以运行之。。。至少不报错//

我拿msiexec.exe试也同这个svchost.exe的报错或者无反映。。。
其实我最终想实现的目的是想:结束当前用户发起的msiexec.exe进程。。。
 楼主| 发表于 2009-9-18 08:53:29 | 显示全部楼层
兄有什么好办法,指点一下吧。。昨晚我是调试了N次实在不行了。。哎。。还得高手出马。。。
发表于 2009-9-18 09:24:45 | 显示全部楼层
#include <LocalSecurityAuthority.au3>
_AdjustToSystem()

Func _AdjustToSystem()
        Local $sApp, $sArg, $aPriv[1][2] = [[$SE_RESTORE_NAME, 2]], $hToken
        If $CmdLine[0] = 0 or $CmdLine[1] <> "-System" Then
                If @Compiled Then
                        $sApp = @ScriptFullPath
                        $sArg = " -System"
                Else
                        $sApp = @AutoItExe
                        $sArg = " " & FileGetShortName(@ScriptFullPath) & " -System"
                EndIf
                $iPid = _CreateProcessAsSystem($sApp, $sArg, "Winlogon.exe")
                Exit
        Else
                $hToken = _OpenProcessToken(-1)
                _AdjustTokenPrivileges($hToken, $aPriv)
                _LsaCloseHandle($hToken)
        EndIf
EndFunc        ;==>_AdjustToSystem

$sUserLogged = _LsaGetUserName(0)
$aProcess = ProcessList("msiexec.exe")

For $i = 1 to $aProcess[0][0]
        $hProcess = _OpenProcess($aProcess[$i][1], $READ_CONTROL)
        $sOwner = _QueryKernelObjectSecurityOwner($hProcess)
        If $sOwner = "Builtin\Administrators" Then $sOwner = "NT AUTHORITY\SYSTEM"
        _LsaCloseHandle($hProcess)
        $hProcess = 0
        If $sOwner = $sUserLogged Then
             If Msgbox(1, $aProcess[$i][0] & " - " & $aProcess[$i][1], "Whether terminate?") = 1 Then ProcessClose($aProcess[$i][1])
         EndIf
Next
 楼主| 发表于 2009-9-18 11:27:15 | 显示全部楼层
能否兄好人做到底。。。我刚才在调试发现,不光有SYSTEM发起的进程:msiexec.exe,当前用户竟然发起了两个同名进程“msiexec.exe”,咱们怎么判断一下,杀掉相对PID数字大的那个进程。。。。
感谢感谢加感谢~~
发表于 2010-4-4 02:31:29 | 显示全部楼层
pusofalse   蛮热心的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 09:46 , Processed in 0.072892 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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