关于同名进程调试中的一个奇怪问题
本帖最后由 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 = [[$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
$hProcess = _OpenProcess($aProcess[$i], $READ_CONTROL)
$sOwner = _QueryKernelObjectSecurityOwner($hProcess)
If $sOwner = "Builtin\Administrators" Then $sOwner = "NT AUTHORITY\SYSTEM"
_LsaCloseHandle($hProcess)
$sOwnertest = StringSplit($sOwner,"\",1)
MsgBox(64,"",$sOwnertest)
MsgBox(64,"","当前用户是:"&@UserName)
;If ($sOwnertest= @UserName) Then ProcessClose ($aProcess[$i])
;EndIf
Next $sOwnertest超出数组范围引发的错误,根本原因是因为_QueryKernelObjectSecurityOwner没有返回一个有效的用户名字符串。svchost.exe进程很奇怪,即使提升权限了,但还是拒绝访问,因为属于NT AUTHORITY\NETWORK SERVICE或LOCAL SERVICE的缘故吧。解决方法?
把标题改好之后告诉你,或者你自己再调试下。 刚发现若不拆分字符串。。直接:
Msgbox(0, $aProcess[$i], $sOwner)竟然可以运行之。。。至少不报错//
我拿msiexec.exe试也同这个svchost.exe的报错或者无反映。。。
其实我最终想实现的目的是想:结束当前用户发起的msiexec.exe进程。。。 兄有什么好办法,指点一下吧。。昨晚我是调试了N次实在不行了。。哎。。还得高手出马。。。 #include <LocalSecurityAuthority.au3>
_AdjustToSystem()
Func _AdjustToSystem()
Local $sApp, $sArg, $aPriv = [[$SE_RESTORE_NAME, 2]], $hToken
If $CmdLine = 0 or $CmdLine <> "-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
$hProcess = _OpenProcess($aProcess[$i], $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] & " - " & $aProcess[$i], "Whether terminate?") = 1 Then ProcessClose($aProcess[$i])
EndIf
Next 能否兄好人做到底。。。我刚才在调试发现,不光有SYSTEM发起的进程:msiexec.exe,当前用户竟然发起了两个同名进程“msiexec.exe”,咱们怎么判断一下,杀掉相对PID数字大的那个进程。。。。
感谢感谢加感谢~~ pusofalse 蛮热心的
页:
[1]