none
如何降低权限运行另一程序(或线程) RRS feed

  • 问题

  • 我现在在制作一个程序,其中的一个部分可能对计算机造成损害(不安全的),所以我希望能够降低运行这部分代码的进程/线程的权限,类似于DropMyRights这个软件的功能。不知是否能够实现?
    比如在XP下从Administrator降为StandardUser,Vista下如果已经提升为管理员则降低为标准权限
    望各位赐教



    ***** 本人目前处于努力学习模式,希望大家多多伸手帮助~ *****
    2009年4月20日 10:43

答案

  • 可以用较低的权限启动一个新的进程。

    在创建一个Process对象的时候,可以指定ProcessStartInfo对象,里面可以设置用户名和密码。如下所示:


            Dim objStartInfo As New System.Diagnostics.ProcessStartInfo()

            With objStartInfo
                .FileName = "notepad"
                .UserName = "test"
                .Password = New System.Security.SecureString()
            End With

            Dim objProcess As New System.Diagnostics.Process()
            objProcess.StartInfo = objProcess
            Call objProcess.Start()


    MCPD (Windows & Web)
    • 已标记为答案 Kaedei 2009年4月23日 10:10
    2009年4月22日 13:19

全部回复

  • 这方面我也不熟悉拉

    但是

    System.Security.Principal.

    WindowsIdentity、

    System.Security.SecurityContext

    这几个类型是相关的


    工作突然有点忙 嘿嘿
    2009年4月21日 1:48
  • 可以用较低的权限启动一个新的进程。

    在创建一个Process对象的时候,可以指定ProcessStartInfo对象,里面可以设置用户名和密码。如下所示:


            Dim objStartInfo As New System.Diagnostics.ProcessStartInfo()

            With objStartInfo
                .FileName = "notepad"
                .UserName = "test"
                .Password = New System.Security.SecureString()
            End With

            Dim objProcess As New System.Diagnostics.Process()
            objProcess.StartInfo = objProcess
            Call objProcess.Start()


    MCPD (Windows & Web)
    • 已标记为答案 Kaedei 2009年4月23日 10:10
    2009年4月22日 13:19
  • 您好!这样是可以的,但是如果不知道当前用户的密码怎么办?

    .UserName = "test"
    .Password = New System.Security.SecureString()

    如果不知道用户的密码,就无法产生一个相应的SecureString,在执行时会提示“用户名或密码不对”……

    ***** 本人目前处于努力学习模式,希望大家多多伸手帮助~ *****
    2009年4月22日 13:29
  • 您好!这样是可以的,但是如果不知道当前用户的密码怎么办?

    .UserName = "test"
    .Password = New System.Security.SecureString()

    如果不知道用户的密码,就无法产生一个相应的SecureString,在执行时会提示“用户名或密码不对”……

    ***** 本人目前处于努力学习模式,希望大家多多伸手帮助~ *****
    你要以该用户的名义来执行一个进程,自然需要知道他的密码啊!

    MCPD (Windows & Web)
    2009年4月22日 13:31
  • 您好!这样是可以的,但是如果不知道当前用户的密码怎么办?

    .UserName = "test"
    .Password = New System.Security.SecureString()

    如果不知道用户的密码,就无法产生一个相应的SecureString,在执行时会提示“用户名或密码不对”……

    ***** 本人目前处于努力学习模式,希望大家多多伸手帮助~ *****
    你要以该用户的名义来执行一个进程,自然需要知道他的密码啊!

    MCPD (Windows & Web)
    啊,其实是这样的。我的程序(以管理员权限运行)的某一功能需要交给第三方的exe(或者是dll)来完成。因为没办法约束这个exe的行为,考虑到安全性所以希望降低权限来运行.
    在提升权限的时候,用.Verb="runas",然后激活UAC就可以提升到管理员权限了,所以我在想是不是也有类似的方法用降低权限启动另一个程序。

    在XP下有一个软件叫DropMyRights,那个软件在运行时也没有提示要输入密码啊


    ***** 本人目前处于努力学习模式,希望大家多多伸手帮助~ *****
    2009年4月22日 13:39
  • 您好!这样是可以的,但是如果不知道当前用户的密码怎么办?

    .UserName = "test"
    .Password = New System.Security.SecureString()

    如果不知道用户的密码,就无法产生一个相应的SecureString,在执行时会提示“用户名或密码不对”……

    ***** 本人目前处于努力学习模式,希望大家多多伸手帮助~ *****
    你要以该用户的名义来执行一个进程,自然需要知道他的密码啊!

    MCPD (Windows & Web)
    啊,其实是这样的。我的程序(以管理员权限运行)的某一功能需要交给第三方的exe(或者是dll)来完成。因为没办法约束这个exe的行为,考虑到安全性所以希望降低权限来运行.
    在提升权限的时候,用.Verb="runas",然后激活UAC就可以提升到管理员权限了,所以我在想是不是也有类似的方法用降低权限启动另一个程序。

    在XP下有一个软件叫DropMyRights,那个软件在运行时也没有提示要输入密码啊


    ***** 本人目前处于努力学习模式,希望大家多多伸手帮助~ *****

    我查看了下DropMyRight的文档。觉得你可以利用DropMyRight。

    使用DropMyRight的时候,将安全运行的可执行路径作为命令行参数。那麽你就可以创建一个Process对象,把FileName的值设置为DropMyRight,然后把命令行参数作为你需要运行的exe!


    MCPD (Windows & Web)
    2009年4月22日 14:12