这是针对Windows(XP,7或8)的相关问题。
是否可以在没有管理员权限的情况下获取进程exec路径?
如果可能,你能建议吗?
更新
示例工作代码:
#RequireAdmin
#include <array.au3>
Dim $proc[1][3]
Dim $i = 0
$WMI = ObjGet("winmgmts:\\.\root\CIMV2")
$result = $WMI.ExecQuery("SELECT * FROM Win32_Process", "WQL",0x10 + 0x20)
If IsObj($result) Then
For $res In $result
$Proc[UBound($proc)-1][0] = $res.Name
$Proc[UBound($proc)-1][1] = $res.Handle
$Proc[UBound($proc)-1][2] = $res.ExecutablePath
ReDim $proc[UBound($proc) + 1][3]
Next
ReDim $proc[UBound($proc) - 1][3]
Else
Msgbox(0,'Result','No result found')
Endif
_ArrayDisplay($Proc,'Process List')][1]
输出:
答案 0 :(得分:3)
如果您有进程ID,请使用OpenProcess()
获取进程的HANDLE
,然后使用GetProcessImageFileName()
或QueryFullProcessImageName()
获取进程的文件名。< / p>
如果需要传递给流程的命令行参数,那就更难了。您必须使用NtQueryInformationProcess()
来获取进程的PEB
结构的地址,然后使用ReadProcessMemory()
来读取PEB的ProcessParameters.CommandLine
成员的内容,这是{{3} }} 结构体。请注意,如果您尝试访问属于其他用户帐户的进程或以更高权限运行的进程,则此操作将失败,除非您的进程具有SeDebugPrivilege
权限,例如通过UNICODE_STRING
启用它。