Windows:在非管理员用户上获取进程exec路径

时间:2014-03-07 13:45:09

标签: windows winapi process

这是针对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]

输出:

http://i.stack.imgur.com/0guuG.png

1 个答案:

答案 0 :(得分:3)

如果您有进程ID,请使用OpenProcess()获取进程的HANDLE,然后使用GetProcessImageFileName()QueryFullProcessImageName()获取进程的文件名。< / p>

如果需要传递给流程的命令行参数,那就更难了。您必须使用NtQueryInformationProcess()来获取进程的PEB结构的地址,然后使用ReadProcessMemory()来读取PEB的ProcessParameters.CommandLine成员的内容,这是{{3} }} 结构体。请注意,如果您尝试访问属于其他用户帐户的进程或以更高权限运行的进程,则此操作将失败,除非您的进程具有SeDebugPrivilege权限,例如通过UNICODE_STRING启用它。