我的进程启动后用户名是system,用它创建一个进程还是system权限既然我已经用administrator登陆了,有没有办法让他启动的进程不是system用户而是administrator用户??最好是不用CreateProcessAsUser,CreateProcessWithLogonW这两个函数,已经登陆了还要输入密码太麻烦了给点建议吧

解决方案 »

  1.   

    CreateProcessAsUser
    http://blog.csdn.net/visualeleven/article/details/7640475
    简单的例子~
      

  2.   

    CreateProcessAsUser 要输入账号密码不好用
    谁有不用账号密码的办法
      

  3.   

    可以试下这样,用CreateRemoteThread()在explorer.exe进程创建远程线程执行CreateProcess()
      

  4.   

    也可以从其他用户进程获取Token, 然后用这个Token创建进程
      

  5.   

    如上所说,如果已经有admin用户登录,那么将其token copy过来然后创建进程,use CreateProcessWithToken
      

  6.   

    怎么获得桌面用户的token呢,可以跨权限copy吗?
      

  7.   

    远程线程注入应该可行,但是现在安全软件都拦截,用户还以为我的程序有啥不法企图copy token 不知道行不行 ,研究下先
      

  8.   

    CreateProcessWithToken可行,但是xp不支持这个函数另外system权限下用这个函数可以使创建的进程用户变成administrator,但是不能session id仍然是system的调用了SetTokenInformation好像也不起作用
      

  9.   

    CreateProcessAsUser 怎么会还需要密码呢~~~先WTSGetActiveConsoleSessionId 得到当前的处理激活状态的SessionIdOpenProcessToken 得到服务进程的TOKENDuplicateTokenEx 复制一个TOKENSetTokenInformation 使用这个函数把复制到的TOKEN的会话ID设置为上面得到的处于激活状态的SessionIdCreateProcessAsUser 使用刚才设置好SessionId的SessionId创建一个用户进程,此进程就是以登录的用户创建的啦,
      

  10.   

    感谢各位的热心帮助
    问题已经解决一个比较简单的方法:1.WTSGetActiveConsoleSessionId
    2.WTSQueryUserToken
    3.CreateProcessAsUser
     
    三步就能实现目标
    但是如果第三步使用CreateProcessWithToken创建进程只能改变用户名不能改变session id结贴给分