我看到讯闪网吧游戏菜单的控制台中有一项设置:禁止IE目录执行程序
然后用IE直接下载打开的程序都没有管理员的权限的(当超过权限操作时会提示),不知道他是怎么做到的!
希望有兴趣的一起研究一下!

解决方案 »

  1.   

    VB创建SYSTEM用户进程(第一种方法)
    VB创建SYSTEM用户进程(第二种方法)  
      

  2.   

    虽然楼上的代码很有技术含量,但不是我想要的效果:
    目前我可以确定用CMD下的命令:RUNAS可以解决用户权限运行的问题,现在唯一的问题是在程序启动的时候判断一下是不是某个目录下的程序然后决定是不是要劫住他用其它权限运行而这个问题是不是可以通过HOOK来做?
      

  3.   

    yes,去google搜索一下超级进程监视器
      

  4.   

    除了用RUNAS命令以外,还有没有办法让程序以更低的权限运行!
      

  5.   

    既然你现在的权限高,那高到啥程度?如果高到可以创建一个GUEST或USER级的用户,那就临时创建用户后再用CreateProcessWithLogon运行之.运行后的用户可以马上删除.记得多年以前的电驴(eMule),就这么干的.....
      

  6.   

    老马我用createprocesswithlogon,我新建了一个ASDF 密码为ASDF的帐号
    可是运行下面的代码没有任何反应
    Private Const LOGON_WITH_PROFILE = &H1&
    Private Const LOGON_NETCREDENTIALS_ONLY = &H2&
    Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
    Private Const CREATE_NEW_CONSOLE = &H10&
    Private Const CREATE_NEW_PROCESS_GROUP = &H200&
    Private Const CREATE_SEPARATE_WOW_VDM = &H800&
    Private Const CREATE_SUSPENDED = &H4&
    Private Const CREATE_UNICODE_ENVIRONMENT = &H400&
    Private Const ABOVE_NORMAL_PRIORITY_CLASS = &H8000&
    Private Const BELOW_NORMAL_PRIORITY_CLASS = &H4000&
    Private Const HIGH_PRIORITY_CLASS = &H80&
    Private Const IDLE_PRIORITY_CLASS = &H40&
    Private Const NORMAL_PRIORITY_CLASS = &H20&
    Private Const REALTIME_PRIORITY_CLASS = &H100&Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
    End TypePrivate Type STARTUPINFO
    cb As Long
    lpReserved As Long
    lpDesktop As Long
    lpTitle As Long
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
    End TypePrivate Declare Function CreateProcessWithLogon Lib "Advapi32" Alias "CreateProcessWithLogonW" (ByVal lpUsername As Long, ByVal lpDomain As Long, ByVal lpPassword As Long, ByVal dwLogonFlags As Long, ByVal lpApplicationName As Long, ByVal lpCommandLine As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInfo As PROCESS_INFORMATION) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Sub Form_Load()
        Dim lpUsername As String, lpDomain As String, lpPassword As String, lpApplicationName As String
        Dim lpCommandLine As String, lpCurrentDirectory As String
        Dim StartInfo As STARTUPINFO, ProcessInfo As PROCESS_INFORMATION
        lpUsername = "asdf"
        lpDomain = ""
        lpPassword = "asdf"
        lpApplicationName = "c:\windows\notepad.exe"
        lpCommandLine = vbNullString 'use the same as lpApplicationName
        lpCurrentDirectory = vbNullString 'use standard directory
        StartInfo.cb = LenB(StartInfo) 'initialize structure
        StartInfo.dwFlags = 0&
        CreateProcessWithLogon StrPtr(lpUsername), StrPtr(lpDomain), StrPtr(lpPassword), LOGON_WITH_PROFILE, StrPtr(lpApplicationName), StrPtr(lpCommandLine), CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP, ByVal 0&, StrPtr(lpCurrentDirectory), StartInfo, ProcessInfo
        CloseHandle ProcessInfo.hThread
        CloseHandle ProcessInfo.hProcessUnload Me
    End Sub
      

  7.   

    代码应该是没啥问题,你最好检查一下API返回值,以确认一下出了什么错.使用这个模块可以方便地将返回值代表的意义以系统提示给出,能方便调试:http://www.m5home.com/bbs/dispbbs.asp?BoardID=28&ID=2509返回值传入GetRetMessage,再选定一下错误类型,就能返回了.比如:       MsgBox GetRetMessage(53,FORMAT_MESSAGE_FROM_SYSTEM)                 显示:  找不到网络路径。        MsgBox GetRetMessage(0,FORMAT_MESSAGE_FROM_SYSTEM)                 显示:  操作成功完成。