Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

时间:2021-03-30 14:43:42
主要目的,是需要“降权启动另一进程”,并且需要兼容 32位和64位系统。

百度,查看了很多网页,没有一个有效的解决办法。

主要的参考资料:
http://www.cnblogs.com/zhanglinfan/articles/2321807.html
我是用VB写程序的,最初是“87”错误,分析了老半天,终于解决这个。
目前是 “1299”错误, 我已经没法解决了,根本找不出“原因”。 Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
出错的地方是: SetTokenInformation( )  调用,操作失败。
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

另外还有一个“从explorer.exe进程复制令牌句柄”的代码(现在找不出哪个网页),
开始“以管理员身份运行”后,老是CreateProcessAsUser( ) 失败,而直接运行程序,却可以启动新进程。
也是折腾了很久,终于“不失败”了。可惜没效果,当“以管理员身份运行”启动,新进程也是管理员权限的。

再有一个,就是这个帖子 6楼代码: http://bbs.csdn.net/topics/360158573
这个“效果不明确”:
1. 我用它启动 cmd.exe,CreateProcessAsUser() 的返回值是1,应该是“成功”的,
  但是,没有看到窗口,任务管理器的“进程”中也找不到cmd.exe的进程。
2. 用它启动“记事本”,窗口出来了,再通过它的“打开文件”对话框,
  去启动我的一个“要求管理员权限运行”的程序,启动时没有“UAC”弹窗(程序图标上也没有那个“小盾牌”),
    这说明“记事本”进程似乎是“有管理员权限”的;
    然而,我的程序启动后,却显示的是“没有管理员权限”,这岂不是与“前一现象”相矛盾?

不知道有没有哪位大神能解决“降权限启动”的问题?

再说一下我的需求:
1. 我的是32位程序,启动时是会申请“管理员身份运行”权限的。
2. 这个程序运行后,会启动另一进程。需要新进程是“普通权限”,这个是最关键的问题所在。
3. 最佳的效果是: 能够以当前登录用户的“标准权限”来启动。
   也就是:如果当前登录用户是“标准账户(受限用户)”,那么新进程就是“标准账户权限”;
    如果当前登录用户是“管理员”(不是“系统”的管理员),那么新进程就是“普通管理员权限”,也就是“未提权”状态;
    如果是用“系统内置管理员Admin”登录的,那么新进程就是“已提权的管理员权限”。
4. 需要32位/64位兼容(Windows Vista及更高版本系统),我的是32位程序。

148 个解决方案

#1


期待答案…………

Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?


这个版块,我只能发100分的帖子啊…………

#3


楼主的意思是希望进程以低级权限运行?
是否意思是需要降低管理员用户的权限来实现?

#4


http://bbs.csdn.net/topics/360209915

#5


引用 2 楼 zgl7903 的回复:
CreateProcessAsUser() windowstations and desktops

这个过程有点复杂啊。  Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

还有,那个LogonUser( ),能用其它方式代替吗?

#6


引用 3 楼 zhujinqiang 的回复:
楼主的意思是希望进程以低级权限运行?
是否意思是需要降低管理员用户的权限来实现?

是希望能启动一个“低权限”的进程,
不过,不能“调整”别的东西。

你说的那个贴子,我早就看过了,不适用。

#7


在cmd窗口中输入以下命令:
whoami
runas /?

#8


拿到explorer进程的token,用它来启动其他进程,这样其他进程就是普通进程权限

#9


引用 7 楼 zhao4zhong1 的回复:
在cmd窗口中输入以下命令:
whoami
runas /?

你到一边凉快去…………
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#10


引用 8 楼 oyljerry 的回复:
拿到explorer进程的token,用它来启动其他进程,这样其他进程就是普通进程权限

请看我主贴中,贴图下面的第3行文字。

#11


你描述那么多还不如描述下你的功能需求,看的一头雾水
我之前也做过一个开机启动要求不弹UAC提示的问题,我用的是NT服务来启动它达到了需求,并不是很完美但是实现了
所需功能,看你的要求要启动一个普通权限的exe 直接CreateProcess不就OK了,就是运行在当前账户下的权限

#12


引用 9 楼 Chen8013 的回复:
Quote: 引用 7 楼 zhao4zhong1 的回复:

在cmd窗口中输入以下命令:
whoami
runas /?

你到一边凉快去…………
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

不听老人言,吃亏在眼前。 Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#13


引用 12 楼 zhao4zhong1 的回复:
Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 7 楼 zhao4zhong1 的回复:

在cmd窗口中输入以下命令:
whoami
runas /?

你到一边凉快去…………
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

不听老人言,吃亏在眼前。 Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

我是要运行的进程中,启动另一个新进程,你给我说用RunAs ???
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

这不是我自己用的,而是需要给“别人”用的 !
你知道别人的账号有没有密码???
你就能确定别人一定不设密码吗!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#14


引用 11 楼 hurryboylqs 的回复:
你描述那么多还不如描述下你的功能需求,看的一头雾水
我之前也做过一个开机启动要求不弹UAC提示的问题,我用的是NT服务来启动它达到了需求,并不是很完美但是实现了
所需功能,看你的要求要启动一个普通权限的exe 直接CreateProcess不就OK了,就是运行在当前账户下的权限

我说得已经很明白了,还一头雾水?
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

这不是UAC弹窗的问题!
我的“第一个程序”在启动时,如果不是“内置管理员账号”登录的计算机、并且“UAC设置”正确,
它在启动时必然会被系统弹窗,经“允许”后得到提权的管理员权限运行。
问题是,它运行后可能会启动另一进程,如果不作处理,启动后的新进程也是“被提权”的。
我的目的,是想要“新进程不被提权”启动,
最理想的效果是“以当前账号的标准权限”启动, 退一步:是以系统的“受限账号”的权限启动。

#15


管理员似乎不需要知道其它用户的密码就可以以该用户身份启动进程。

#16


引用 15 楼 zhao4zhong1 的回复:
管理员似乎不需要知道其它用户的密码就可以以该用户身份启动进程。


Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

有这事?  Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#17


引用 15 楼 zhao4zhong1 的回复:
管理员似乎不需要知道其它用户的密码就可以以该用户身份启动进程。

其实也不是说用“其它用户”,实际需要的是“以当前用户权限”来运行。
等有空建一些测试账户试一下。

#18


就怕是“当前用户”是普通管理员,
然后在进程中再以当前用户RunAs启动新进程后,新进程仍然是“提权后”的。

#19


通读MSDN中权限相关章节。

#20


引用 19 楼 zhao4zhong1 的回复:
通读MSDN中权限相关章节。

我看你还是纸上谈兵的时候比较多  …………

你可以歇菜了  Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#21


“似乎” Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#22


SetTokenInformation( )失败试下进程提权
SE_CREATE_TOKEN_NAME
SE_ASSIGNPRIMARYTOKEN_NAME

#23


引用 22 楼 zwfgdlc 的回复:
SetTokenInformation( )失败试下进程提权
SE_CREATE_TOKEN_NAME
SE_ASSIGNPRIMARYTOKEN_NAME

我的进程已经是通过“UAC”功能得到了“提权”的了,
算是得到了“操作系统允许用户级进程“合法获取”的最高权限”了吧。
现在需要的是对将要启动的新进程“降权运行”……
 不是“要提权”!!!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#24


引用 23楼我是你的主体 的回复:
Quote: 引用 22 楼 zwfgdlc 的回复:

SetTokenInformation( )失败试下进程提权
SE_CREATE_TOKEN_NAME
SE_ASSIGNPRIMARYTOKEN_NAME

我的进程已经是通过“UAC”功能得到了“提权”的了,
算是得到了“操作系统允许用户级进程“合法获取”的最高权限”了吧。
现在需要的是对将要启动的新进程“降权运行”……
 不是“要提权”!!!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
这个提权跟那个用户权限不一样

#25


你们在说什么,我怎么听不懂, Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#26


获取当前explorer的token,然后用CreateProcessAsUser创建进程
http://nicoconi.com/2013-05/win7%E4%B8%8B%E6%8F%90%E6%9D%83%E5%8F%8A%E9%99%8D%E6%9D%83%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.html

#27


引用 26 楼 oyljerry 的回复:
获取当前explorer的token,然后用CreateProcessAsUser创建进程
http://nicoconi.com/2013-05/win7%E4%B8%8B%E6%8F%90%E6%9D%83%E5%8F%8A%E9%99%8D%E6%9D%83%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.html

那个贴子中,代码第11行:
SID sid = {0};

我查不到“SID”这种数据类型的定义啊,msdn网站上都查不到有实质意义的东西。
能把结构定义贴一下吗?
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#28


引用 25 楼 m2200 的回复:
你们在说什么,我怎么听不懂, Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

你个大水B,听不懂就对了。
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#29


引用 19 楼 zhao4zhong1 的回复:
通读MSDN中权限相关章节。

CreateProcessAsUser Function

Creates a new process and its primary thread. The new process runs in the security context of the user represented by the specified token.


BOOL WINAPI CreateProcessAsUser(
  __in          HANDLE hToken,
  __in          LPCTSTR lpApplicationName,
  __in          LPTSTR lpCommandLine,
  __in          LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in          LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in          BOOL bInheritHandles,
  __in          DWORD dwCreationFlags,
  __in          LPVOID lpEnvironment,
  __in          LPCTSTR lpCurrentDirectory,
  __in          LPSTARTUPINFO lpStartupInfo,
  __out         LPPROCESS_INFORMATION lpProcessInformation
);

Parameters
hToken 
A handle to the primary token that represents a user. The handle must have the TOKEN_QUERY, TOKEN_DUPLICATE, and TOKEN_ASSIGN_PRIMARY access rights. For more information, see Access Rights for Access-Token Objects. The user represented by the token must have read and execute access to the application specified by the lpApplicationName or the lpCommandLine parameter. 

To get a primary token that represents the specified user, call the LogonUser function. Alternatively, you can call the DuplicateTokenEx function to convert an impersonation token into a primary token. This allows a server application that is impersonating a client to create a process that has the security context of the client.

Terminal Services:  The process is run in the session specified in the token. By default, this is the same session that called LogonUser. To change the session, use the SetTokenInformation function.

Access Rights for Access-Token Objects
An application cannot change the access control list of an object unless the application has the rights to do so. These rights are controlled by a security descriptor in the access token for the object. For more information about security, see Access Control Model.

To get or set the security descriptor for an access token, call the GetKernelObjectSecurity and SetKernelObjectSecurity functions.

When you call the OpenProcessToken or OpenThreadToken function to get a handle to an access token, the system checks the requested access rights against the DACL in the token's security descriptor.


The following are valid access rights for access-token objects:


The DELETE, READ_CONTROL, WRITE_DAC, and WRITE_OWNER standard access rights. Access tokens do not support the SYNCHRONIZE standard access right. 
The ACCESS_SYSTEM_SECURITY right to get or set the SACL in the object's security descriptor. 
The specific access rights for access tokens, which are listed in the following table.Value Meaning 
TOKEN_ADJUST_DEFAULT Required to change the default owner, primary group, or DACL of an access token. 
TOKEN_ADJUST_GROUPS Required to adjust the attributes of the groups in an access token. 
TOKEN_ADJUST_PRIVILEGES Required to enable or disable the privileges in an access token. 
TOKEN_ADJUST_SESSIONID Required to adjust the session ID of an access token. The SE_TCB_NAME privilege is required. 
TOKEN_ASSIGN_PRIMARY Required to attach a primary token to a process. The SE_ASSIGNPRIMARYTOKEN_NAME privilege is also required to accomplish this task. 
TOKEN_DUPLICATE Required to duplicate an access token. 
TOKEN_EXECUTE Combines STANDARD_RIGHTS_EXECUTE and TOKEN_IMPERSONATE. 
TOKEN_IMPERSONATE Required to attach an impersonation access token to a process. 
TOKEN_QUERY Required to query an access token. 
TOKEN_QUERY_SOURCE Required to query the source of an access token. 
TOKEN_READ Combines STANDARD_RIGHTS_READ and TOKEN_QUERY. 
TOKEN_WRITE Combines STANDARD_RIGHTS_WRITE, TOKEN_ADJUST_PRIVILEGES, TOKEN_ADJUST_GROUPS, and TOKEN_ADJUST_DEFAULT. 
TOKEN_ALL_ACCESS Combines all possible access rights for a token. 



Send comments about this topic to Microsoft 

Build date: 8/15/2007

LogonUser Function

The LogonUser function attempts to log a user on to the local computer. The local computer is the computer from which LogonUser was called. You cannot use LogonUser to log on to a remote computer. You specify the user with a user name and domain and authenticate the user with a plaintext password. If the function succeeds, you receive a handle to a token that represents the logged-on user. You can then use this token handle to impersonate the specified user or, in most cases, to create a process that runs in the context of the specified user.


BOOL LogonUser(
  __in          LPTSTR lpszUsername,
  __in          LPTSTR lpszDomain,
  __in          LPTSTR lpszPassword,
  __in          DWORD dwLogonType,
  __in          DWORD dwLogonProvider,
  __out         PHANDLE phToken
);

DuplicateTokenEx Function

The DuplicateTokenEx function creates a new access token that duplicates an existing token. This function can create either a primary token or an impersonation token.


BOOL WINAPI DuplicateTokenEx(
  __in          HANDLE hExistingToken,
  __in          DWORD dwDesiredAccess,
  __in_opt      LPSECURITY_ATTRIBUTES lpTokenAttributes,
  __in          SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
  __in          TOKEN_TYPE TokenType,
  __out         PHANDLE phNewToken
);

SetTokenInformation Function

The SetTokenInformation function sets various types of information for a specified access token. The information that this function sets replaces existing information. The calling process must have appropriate access rights to set the information.


BOOL WINAPI SetTokenInformation(
  __in          HANDLE TokenHandle,
  __in          TOKEN_INFORMATION_CLASS TokenInformationClass,
  __in          LPVOID TokenInformation,
  __in          DWORD TokenInformationLength
);

有人说我只会复制粘贴MSDN。
他们不幸言中了 !
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#30


引用 29 楼 zhao4zhong1 的回复:
Quote: 引用 19 楼 zhao4zhong1 的回复:

通读MSDN中权限相关章节。

CreateProcessAsUser Function
. . . . . . . . . . 



有人说我只会复制粘贴MSDN。
他们不幸言中了 !
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

难道这不是事实吗!!!!!!

你能复制、粘贴出来,别人就查不到?看不到???
你复制粘贴的这一大堆文字,有个鸟用!!!

如果没看懂别人问的是什么、不能指出问题根源所在,可以少发言!!!!

Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#31


其实我就是来混分等死的。 Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#32


虽然管理员在不知道另一个用户的登录密码的情况下,无法通过LogonUser receive a handle to a token that represents the logged-on user;
但管理员可以
临时创建一个和该用户一样权限的新用户,设置对应新密码,再通过LogonUser receive a handle to a token that represents the logged-on user
或者
修改该用户的登录密码,再通过LogonUser receive a handle to a token that represents the logged-on user

我觉得。

#33


引用 27 楼 Chen8013 的回复:
Quote: 引用 26 楼 oyljerry 的回复:

获取当前explorer的token,然后用CreateProcessAsUser创建进程
http://nicoconi.com/2013-05/win7%E4%B8%8B%E6%8F%90%E6%9D%83%E5%8F%8A%E9%99%8D%E6%9D%83%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.html

那个贴子中,代码第11行:
SID sid = {0};

我查不到“SID”这种数据类型的定义啊,msdn网站上都查不到有实质意义的东西。
能把结构定义贴一下吗?
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

typedef struct _SID {
   BYTE  Revision;
   BYTE  SubAuthorityCount;
   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
#ifdef MIDL_PASS
   [size_is(SubAuthorityCount)] DWORD SubAuthority[*];
#else // MIDL_PASS
   DWORD SubAuthority[ANYSIZE_ARRAY];
#endif // MIDL_PASS
} SID, *PISID;

#34


应该
runas /trustlevel:0x20000 notepad.exe
就可以。

#35


if (options.as_user)
  {
  flags |= CREATE_UNICODE_ENVIRONMENT;
  void* enviroment_block = NULL;

  if (!CreateEnvironmentBlock(&enviroment_block, options.as_user, FALSE))
  {
  return Process();
  }

  BOOL launched = CreateProcessAsUser(options.as_user, NULL,
                                  &writable_cmdline[0],
                                  NULL, NULL, inherit_handles, flags,
                                  enviroment_block, NULL, startup_info,
                                  &temp_process_info);
  DestroyEnvironmentBlock(enviroment_block);
  if (!launched)
  {

  return Process();
  }
  }
  else
  {
  if (!CreateProcess(NULL,
                 &writable_cmdline[0], NULL, NULL,
                 inherit_handles, flags, NULL, NULL,
                 startup_info, &temp_process_info))
  {
  return Process();
  }
  }

#36


该用户身份启动进程。

#37


该用户身份启动进程。

#38



引用 33 楼 zwfgdlc 的回复:
. . . . . . . . .

typedef struct _SID {
   BYTE  Revision;
   BYTE  SubAuthorityCount;
   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
#ifdef MIDL_PASS
   [size_is(SubAuthorityCount)] DWORD SubAuthority[*];
#else // MIDL_PASS
   DWORD SubAuthority[ANYSIZE_ARRAY];
#endif // MIDL_PASS
} SID, *PISID;

谢谢! 已经成功把26楼链接的那个帖子的代码“翻译”了,可正常运行。
  (有点惊喜: 调用SetTokenInformation( ) 的操作能够成功执行 !)
引用 26 楼 oyljerry 的回复:
获取当前explorer的token,然后用CreateProcessAsUser创建进程
http://nicoconi.com/2013-05/win7%E4%B8%8B%E6%8F%90%E6%9D%83%E5%8F%8A%E9%99%8D%E6%9D%83%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.html


很遗憾的是: 没有效果啊……
如果进程是“以管理员身份运行”的,那么调用 DuplicateTokenLevel( ) 返回的令牌句柄,
  传给 CreateProcessAsUser(hToken, . . . . ) 创建一个新进程,这个新进程也是“管理员权限”的!
即使在调用时,DuplicateTokenLevel(False ) ,在这个函数内是用的“SECURITY_MANDATORY_LOW_RID”,
  也没有效果,新进程还是“管理员权限”。

#39


引用 34 楼 DelphiGuy 的回复:
应该
runas /trustlevel:0x20000 notepad.exe
就可以。


你这个方法也试了,没达到目的。 是这样的效果:
在我的程序中,通过执行  runas.exe /trustlevel:0x20000 C:\Windows\System32\cmd.exe 启动 cmd.exe ;
下面图中,窗口中标“1”的是直接启动程序(普通管理员)执行的结果,“2”是“以管理员身份运行”的结果。
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
可见,仍然是没能解决问题的。
我向“窗口1”中拖入一个文件,可以在它里面显示出文件路径及文件名;
而向“窗口2”中拖入一个文件,鼠标“放开”后没反应,可见“被拒绝”了。

#40


引用 36 楼 cdcjk 的回复:
该用户身份启动进程。


引用 37 楼 qq_37904673 的回复:
该用户身份启动进程。

你俩是灌水呢 ??????

…………
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#41


666666666666

#42


Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#43


引用 39 楼 Chen8013 的回复:
Quote: 引用 34 楼 DelphiGuy 的回复:

应该
runas /trustlevel:0x20000 notepad.exe
就可以。


你这个方法也试了,没达到目的。 是这样的效果:
在我的程序中,通过执行  runas.exe /trustlevel:0x20000 C:\Windows\System32\cmd.exe 启动 cmd.exe ;
下面图中,窗口中标“1”的是直接启动程序(普通管理员)执行的结果,“2”是“以管理员身份运行”的结果。
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
可见,仍然是没能解决问题的。
我向“窗口1”中拖入一个文件,可以在它里面显示出文件路径及文件名;
而向“窗口2”中拖入一个文件,鼠标“放开”后没反应,可见“被拒绝”了。

拖入的文件没设置对应权限,我再猜。
参考cacls命令:
C:\> cacls /?
显示或者修改文件的访问控制列表(ACL)

CACLS filename [/T] [/M] [/S[:SDDL]] [/E] [/C] [/G user:perm] [/R user [...]]
               [/P user:perm [...]] [/D user [...]]
   filename      Displays ACLs.
   /T            更改当前目录及其所有子目录中指定
                 文件的 ACL。
   /M            将装入卷的 ACL 更改到目录。
   /S            显示 DACL 的 SDDL 字符串。
   /S:SDDL       用 SDDL 字符串中指定的 ACL 替换
                 (与 /E、/G、/R、/P 或 /D 一起使用时无效)。
   /E            编辑 ACL 而不替换。
   /C            在出现拒绝访问错误时继续。
   /G user:perm  赋予指定用户访问权限。
                 Perm 可以是: R 读取
                              W  写入
                              C  更改(写入)
                              F 完全控制
   /R user       撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。
   /P user:perm  替换指定用户的访问权限。
                 Perm 可以是: N 无
                              R 读取
                              W 写入
                              C 更改(写入)
                              F 完全控制
 /D user         拒绝指定用户的访问。
在命令中可以使用通配符指定多个文件。也可以在命令中指定
多个用户。

缩写:
   CI - 容器继承。
        ACE 会由目录继承。
   OI - 对象继承。
        ACE 会由文件继承。
   IO - 只继承。
        ACE 不适用于当前文件/目录。

#44


在两个cmd窗口中执行命令whoami

#45


Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#46


learning~

#47


赵4 只知道胡说八道 !!!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#48


learning~

#49


我觉得你应该把你最原始的需要描述一下
有可能就有人能提供其他的思路来实现,而不是现在的这个思路
现在好像是给自己限定了一个范围,从而陷入了具体实现的泥潭里了

#50


引用 11 楼 hurryboylqs 的回复:
你描述那么多还不如描述下你的功能需求,看的一头雾水
我之前也做过一个开机启动要求不弹UAC提示的问题,我用的是NT服务来启动它达到了需求,并不是很完美但是实现了
所需功能,看你的要求要启动一个普通权限的exe 直接CreateProcess不就OK了,就是运行在当前账户下的权限


引用 49 楼 mayudong1 的回复:
我觉得你应该把你最原始的需要描述一下
有可能就有人能提供其他的思路来实现,而不是现在的这个思路
现在好像是给自己限定了一个范围,从而陷入了具体实现的泥潭里了


我说得还不清楚?
你们是只看“贴子标题”,不看内容的吗 !!!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

你还想知道什么?
难不成还需要我把那个程序是做什么的、程序流程、实现的细节都讲一下?

#1


期待答案…………

Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?


这个版块,我只能发100分的帖子啊…………

#2


#3


楼主的意思是希望进程以低级权限运行?
是否意思是需要降低管理员用户的权限来实现?

#4


http://bbs.csdn.net/topics/360209915

#5


引用 2 楼 zgl7903 的回复:
CreateProcessAsUser() windowstations and desktops

这个过程有点复杂啊。  Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

还有,那个LogonUser( ),能用其它方式代替吗?

#6


引用 3 楼 zhujinqiang 的回复:
楼主的意思是希望进程以低级权限运行?
是否意思是需要降低管理员用户的权限来实现?

是希望能启动一个“低权限”的进程,
不过,不能“调整”别的东西。

你说的那个贴子,我早就看过了,不适用。

#7


在cmd窗口中输入以下命令:
whoami
runas /?

#8


拿到explorer进程的token,用它来启动其他进程,这样其他进程就是普通进程权限

#9


引用 7 楼 zhao4zhong1 的回复:
在cmd窗口中输入以下命令:
whoami
runas /?

你到一边凉快去…………
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#10


引用 8 楼 oyljerry 的回复:
拿到explorer进程的token,用它来启动其他进程,这样其他进程就是普通进程权限

请看我主贴中,贴图下面的第3行文字。

#11


你描述那么多还不如描述下你的功能需求,看的一头雾水
我之前也做过一个开机启动要求不弹UAC提示的问题,我用的是NT服务来启动它达到了需求,并不是很完美但是实现了
所需功能,看你的要求要启动一个普通权限的exe 直接CreateProcess不就OK了,就是运行在当前账户下的权限

#12


引用 9 楼 Chen8013 的回复:
Quote: 引用 7 楼 zhao4zhong1 的回复:

在cmd窗口中输入以下命令:
whoami
runas /?

你到一边凉快去…………
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

不听老人言,吃亏在眼前。 Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#13


引用 12 楼 zhao4zhong1 的回复:
Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 7 楼 zhao4zhong1 的回复:

在cmd窗口中输入以下命令:
whoami
runas /?

你到一边凉快去…………
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

不听老人言,吃亏在眼前。 Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

我是要运行的进程中,启动另一个新进程,你给我说用RunAs ???
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

这不是我自己用的,而是需要给“别人”用的 !
你知道别人的账号有没有密码???
你就能确定别人一定不设密码吗!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#14


引用 11 楼 hurryboylqs 的回复:
你描述那么多还不如描述下你的功能需求,看的一头雾水
我之前也做过一个开机启动要求不弹UAC提示的问题,我用的是NT服务来启动它达到了需求,并不是很完美但是实现了
所需功能,看你的要求要启动一个普通权限的exe 直接CreateProcess不就OK了,就是运行在当前账户下的权限

我说得已经很明白了,还一头雾水?
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

这不是UAC弹窗的问题!
我的“第一个程序”在启动时,如果不是“内置管理员账号”登录的计算机、并且“UAC设置”正确,
它在启动时必然会被系统弹窗,经“允许”后得到提权的管理员权限运行。
问题是,它运行后可能会启动另一进程,如果不作处理,启动后的新进程也是“被提权”的。
我的目的,是想要“新进程不被提权”启动,
最理想的效果是“以当前账号的标准权限”启动, 退一步:是以系统的“受限账号”的权限启动。

#15


管理员似乎不需要知道其它用户的密码就可以以该用户身份启动进程。

#16


引用 15 楼 zhao4zhong1 的回复:
管理员似乎不需要知道其它用户的密码就可以以该用户身份启动进程。


Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

有这事?  Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#17


引用 15 楼 zhao4zhong1 的回复:
管理员似乎不需要知道其它用户的密码就可以以该用户身份启动进程。

其实也不是说用“其它用户”,实际需要的是“以当前用户权限”来运行。
等有空建一些测试账户试一下。

#18


就怕是“当前用户”是普通管理员,
然后在进程中再以当前用户RunAs启动新进程后,新进程仍然是“提权后”的。

#19


通读MSDN中权限相关章节。

#20


引用 19 楼 zhao4zhong1 的回复:
通读MSDN中权限相关章节。

我看你还是纸上谈兵的时候比较多  …………

你可以歇菜了  Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#21


“似乎” Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#22


SetTokenInformation( )失败试下进程提权
SE_CREATE_TOKEN_NAME
SE_ASSIGNPRIMARYTOKEN_NAME

#23


引用 22 楼 zwfgdlc 的回复:
SetTokenInformation( )失败试下进程提权
SE_CREATE_TOKEN_NAME
SE_ASSIGNPRIMARYTOKEN_NAME

我的进程已经是通过“UAC”功能得到了“提权”的了,
算是得到了“操作系统允许用户级进程“合法获取”的最高权限”了吧。
现在需要的是对将要启动的新进程“降权运行”……
 不是“要提权”!!!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#24


引用 23楼我是你的主体 的回复:
Quote: 引用 22 楼 zwfgdlc 的回复:

SetTokenInformation( )失败试下进程提权
SE_CREATE_TOKEN_NAME
SE_ASSIGNPRIMARYTOKEN_NAME

我的进程已经是通过“UAC”功能得到了“提权”的了,
算是得到了“操作系统允许用户级进程“合法获取”的最高权限”了吧。
现在需要的是对将要启动的新进程“降权运行”……
 不是“要提权”!!!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
这个提权跟那个用户权限不一样

#25


你们在说什么,我怎么听不懂, Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#26


获取当前explorer的token,然后用CreateProcessAsUser创建进程
http://nicoconi.com/2013-05/win7%E4%B8%8B%E6%8F%90%E6%9D%83%E5%8F%8A%E9%99%8D%E6%9D%83%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.html

#27


引用 26 楼 oyljerry 的回复:
获取当前explorer的token,然后用CreateProcessAsUser创建进程
http://nicoconi.com/2013-05/win7%E4%B8%8B%E6%8F%90%E6%9D%83%E5%8F%8A%E9%99%8D%E6%9D%83%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.html

那个贴子中,代码第11行:
SID sid = {0};

我查不到“SID”这种数据类型的定义啊,msdn网站上都查不到有实质意义的东西。
能把结构定义贴一下吗?
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#28


引用 25 楼 m2200 的回复:
你们在说什么,我怎么听不懂, Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

你个大水B,听不懂就对了。
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#29


引用 19 楼 zhao4zhong1 的回复:
通读MSDN中权限相关章节。

CreateProcessAsUser Function

Creates a new process and its primary thread. The new process runs in the security context of the user represented by the specified token.


BOOL WINAPI CreateProcessAsUser(
  __in          HANDLE hToken,
  __in          LPCTSTR lpApplicationName,
  __in          LPTSTR lpCommandLine,
  __in          LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in          LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in          BOOL bInheritHandles,
  __in          DWORD dwCreationFlags,
  __in          LPVOID lpEnvironment,
  __in          LPCTSTR lpCurrentDirectory,
  __in          LPSTARTUPINFO lpStartupInfo,
  __out         LPPROCESS_INFORMATION lpProcessInformation
);

Parameters
hToken 
A handle to the primary token that represents a user. The handle must have the TOKEN_QUERY, TOKEN_DUPLICATE, and TOKEN_ASSIGN_PRIMARY access rights. For more information, see Access Rights for Access-Token Objects. The user represented by the token must have read and execute access to the application specified by the lpApplicationName or the lpCommandLine parameter. 

To get a primary token that represents the specified user, call the LogonUser function. Alternatively, you can call the DuplicateTokenEx function to convert an impersonation token into a primary token. This allows a server application that is impersonating a client to create a process that has the security context of the client.

Terminal Services:  The process is run in the session specified in the token. By default, this is the same session that called LogonUser. To change the session, use the SetTokenInformation function.

Access Rights for Access-Token Objects
An application cannot change the access control list of an object unless the application has the rights to do so. These rights are controlled by a security descriptor in the access token for the object. For more information about security, see Access Control Model.

To get or set the security descriptor for an access token, call the GetKernelObjectSecurity and SetKernelObjectSecurity functions.

When you call the OpenProcessToken or OpenThreadToken function to get a handle to an access token, the system checks the requested access rights against the DACL in the token's security descriptor.


The following are valid access rights for access-token objects:


The DELETE, READ_CONTROL, WRITE_DAC, and WRITE_OWNER standard access rights. Access tokens do not support the SYNCHRONIZE standard access right. 
The ACCESS_SYSTEM_SECURITY right to get or set the SACL in the object's security descriptor. 
The specific access rights for access tokens, which are listed in the following table.Value Meaning 
TOKEN_ADJUST_DEFAULT Required to change the default owner, primary group, or DACL of an access token. 
TOKEN_ADJUST_GROUPS Required to adjust the attributes of the groups in an access token. 
TOKEN_ADJUST_PRIVILEGES Required to enable or disable the privileges in an access token. 
TOKEN_ADJUST_SESSIONID Required to adjust the session ID of an access token. The SE_TCB_NAME privilege is required. 
TOKEN_ASSIGN_PRIMARY Required to attach a primary token to a process. The SE_ASSIGNPRIMARYTOKEN_NAME privilege is also required to accomplish this task. 
TOKEN_DUPLICATE Required to duplicate an access token. 
TOKEN_EXECUTE Combines STANDARD_RIGHTS_EXECUTE and TOKEN_IMPERSONATE. 
TOKEN_IMPERSONATE Required to attach an impersonation access token to a process. 
TOKEN_QUERY Required to query an access token. 
TOKEN_QUERY_SOURCE Required to query the source of an access token. 
TOKEN_READ Combines STANDARD_RIGHTS_READ and TOKEN_QUERY. 
TOKEN_WRITE Combines STANDARD_RIGHTS_WRITE, TOKEN_ADJUST_PRIVILEGES, TOKEN_ADJUST_GROUPS, and TOKEN_ADJUST_DEFAULT. 
TOKEN_ALL_ACCESS Combines all possible access rights for a token. 



Send comments about this topic to Microsoft 

Build date: 8/15/2007

LogonUser Function

The LogonUser function attempts to log a user on to the local computer. The local computer is the computer from which LogonUser was called. You cannot use LogonUser to log on to a remote computer. You specify the user with a user name and domain and authenticate the user with a plaintext password. If the function succeeds, you receive a handle to a token that represents the logged-on user. You can then use this token handle to impersonate the specified user or, in most cases, to create a process that runs in the context of the specified user.


BOOL LogonUser(
  __in          LPTSTR lpszUsername,
  __in          LPTSTR lpszDomain,
  __in          LPTSTR lpszPassword,
  __in          DWORD dwLogonType,
  __in          DWORD dwLogonProvider,
  __out         PHANDLE phToken
);

DuplicateTokenEx Function

The DuplicateTokenEx function creates a new access token that duplicates an existing token. This function can create either a primary token or an impersonation token.


BOOL WINAPI DuplicateTokenEx(
  __in          HANDLE hExistingToken,
  __in          DWORD dwDesiredAccess,
  __in_opt      LPSECURITY_ATTRIBUTES lpTokenAttributes,
  __in          SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
  __in          TOKEN_TYPE TokenType,
  __out         PHANDLE phNewToken
);

SetTokenInformation Function

The SetTokenInformation function sets various types of information for a specified access token. The information that this function sets replaces existing information. The calling process must have appropriate access rights to set the information.


BOOL WINAPI SetTokenInformation(
  __in          HANDLE TokenHandle,
  __in          TOKEN_INFORMATION_CLASS TokenInformationClass,
  __in          LPVOID TokenInformation,
  __in          DWORD TokenInformationLength
);

有人说我只会复制粘贴MSDN。
他们不幸言中了 !
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#30


引用 29 楼 zhao4zhong1 的回复:
Quote: 引用 19 楼 zhao4zhong1 的回复:

通读MSDN中权限相关章节。

CreateProcessAsUser Function
. . . . . . . . . . 



有人说我只会复制粘贴MSDN。
他们不幸言中了 !
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

难道这不是事实吗!!!!!!

你能复制、粘贴出来,别人就查不到?看不到???
你复制粘贴的这一大堆文字,有个鸟用!!!

如果没看懂别人问的是什么、不能指出问题根源所在,可以少发言!!!!

Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#31


其实我就是来混分等死的。 Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#32


虽然管理员在不知道另一个用户的登录密码的情况下,无法通过LogonUser receive a handle to a token that represents the logged-on user;
但管理员可以
临时创建一个和该用户一样权限的新用户,设置对应新密码,再通过LogonUser receive a handle to a token that represents the logged-on user
或者
修改该用户的登录密码,再通过LogonUser receive a handle to a token that represents the logged-on user

我觉得。

#33


引用 27 楼 Chen8013 的回复:
Quote: 引用 26 楼 oyljerry 的回复:

获取当前explorer的token,然后用CreateProcessAsUser创建进程
http://nicoconi.com/2013-05/win7%E4%B8%8B%E6%8F%90%E6%9D%83%E5%8F%8A%E9%99%8D%E6%9D%83%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.html

那个贴子中,代码第11行:
SID sid = {0};

我查不到“SID”这种数据类型的定义啊,msdn网站上都查不到有实质意义的东西。
能把结构定义贴一下吗?
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

typedef struct _SID {
   BYTE  Revision;
   BYTE  SubAuthorityCount;
   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
#ifdef MIDL_PASS
   [size_is(SubAuthorityCount)] DWORD SubAuthority[*];
#else // MIDL_PASS
   DWORD SubAuthority[ANYSIZE_ARRAY];
#endif // MIDL_PASS
} SID, *PISID;

#34


应该
runas /trustlevel:0x20000 notepad.exe
就可以。

#35


if (options.as_user)
  {
  flags |= CREATE_UNICODE_ENVIRONMENT;
  void* enviroment_block = NULL;

  if (!CreateEnvironmentBlock(&enviroment_block, options.as_user, FALSE))
  {
  return Process();
  }

  BOOL launched = CreateProcessAsUser(options.as_user, NULL,
                                  &writable_cmdline[0],
                                  NULL, NULL, inherit_handles, flags,
                                  enviroment_block, NULL, startup_info,
                                  &temp_process_info);
  DestroyEnvironmentBlock(enviroment_block);
  if (!launched)
  {

  return Process();
  }
  }
  else
  {
  if (!CreateProcess(NULL,
                 &writable_cmdline[0], NULL, NULL,
                 inherit_handles, flags, NULL, NULL,
                 startup_info, &temp_process_info))
  {
  return Process();
  }
  }

#36


该用户身份启动进程。

#37


该用户身份启动进程。

#38



引用 33 楼 zwfgdlc 的回复:
. . . . . . . . .

typedef struct _SID {
   BYTE  Revision;
   BYTE  SubAuthorityCount;
   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
#ifdef MIDL_PASS
   [size_is(SubAuthorityCount)] DWORD SubAuthority[*];
#else // MIDL_PASS
   DWORD SubAuthority[ANYSIZE_ARRAY];
#endif // MIDL_PASS
} SID, *PISID;

谢谢! 已经成功把26楼链接的那个帖子的代码“翻译”了,可正常运行。
  (有点惊喜: 调用SetTokenInformation( ) 的操作能够成功执行 !)
引用 26 楼 oyljerry 的回复:
获取当前explorer的token,然后用CreateProcessAsUser创建进程
http://nicoconi.com/2013-05/win7%E4%B8%8B%E6%8F%90%E6%9D%83%E5%8F%8A%E9%99%8D%E6%9D%83%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.html


很遗憾的是: 没有效果啊……
如果进程是“以管理员身份运行”的,那么调用 DuplicateTokenLevel( ) 返回的令牌句柄,
  传给 CreateProcessAsUser(hToken, . . . . ) 创建一个新进程,这个新进程也是“管理员权限”的!
即使在调用时,DuplicateTokenLevel(False ) ,在这个函数内是用的“SECURITY_MANDATORY_LOW_RID”,
  也没有效果,新进程还是“管理员权限”。

#39


引用 34 楼 DelphiGuy 的回复:
应该
runas /trustlevel:0x20000 notepad.exe
就可以。


你这个方法也试了,没达到目的。 是这样的效果:
在我的程序中,通过执行  runas.exe /trustlevel:0x20000 C:\Windows\System32\cmd.exe 启动 cmd.exe ;
下面图中,窗口中标“1”的是直接启动程序(普通管理员)执行的结果,“2”是“以管理员身份运行”的结果。
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
可见,仍然是没能解决问题的。
我向“窗口1”中拖入一个文件,可以在它里面显示出文件路径及文件名;
而向“窗口2”中拖入一个文件,鼠标“放开”后没反应,可见“被拒绝”了。

#40


引用 36 楼 cdcjk 的回复:
该用户身份启动进程。


引用 37 楼 qq_37904673 的回复:
该用户身份启动进程。

你俩是灌水呢 ??????

…………
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#41


666666666666

#42


Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#43


引用 39 楼 Chen8013 的回复:
Quote: 引用 34 楼 DelphiGuy 的回复:

应该
runas /trustlevel:0x20000 notepad.exe
就可以。


你这个方法也试了,没达到目的。 是这样的效果:
在我的程序中,通过执行  runas.exe /trustlevel:0x20000 C:\Windows\System32\cmd.exe 启动 cmd.exe ;
下面图中,窗口中标“1”的是直接启动程序(普通管理员)执行的结果,“2”是“以管理员身份运行”的结果。
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?
可见,仍然是没能解决问题的。
我向“窗口1”中拖入一个文件,可以在它里面显示出文件路径及文件名;
而向“窗口2”中拖入一个文件,鼠标“放开”后没反应,可见“被拒绝”了。

拖入的文件没设置对应权限,我再猜。
参考cacls命令:
C:\> cacls /?
显示或者修改文件的访问控制列表(ACL)

CACLS filename [/T] [/M] [/S[:SDDL]] [/E] [/C] [/G user:perm] [/R user [...]]
               [/P user:perm [...]] [/D user [...]]
   filename      Displays ACLs.
   /T            更改当前目录及其所有子目录中指定
                 文件的 ACL。
   /M            将装入卷的 ACL 更改到目录。
   /S            显示 DACL 的 SDDL 字符串。
   /S:SDDL       用 SDDL 字符串中指定的 ACL 替换
                 (与 /E、/G、/R、/P 或 /D 一起使用时无效)。
   /E            编辑 ACL 而不替换。
   /C            在出现拒绝访问错误时继续。
   /G user:perm  赋予指定用户访问权限。
                 Perm 可以是: R 读取
                              W  写入
                              C  更改(写入)
                              F 完全控制
   /R user       撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。
   /P user:perm  替换指定用户的访问权限。
                 Perm 可以是: N 无
                              R 读取
                              W 写入
                              C 更改(写入)
                              F 完全控制
 /D user         拒绝指定用户的访问。
在命令中可以使用通配符指定多个文件。也可以在命令中指定
多个用户。

缩写:
   CI - 容器继承。
        ACE 会由目录继承。
   OI - 对象继承。
        ACE 会由文件继承。
   IO - 只继承。
        ACE 不适用于当前文件/目录。

#44


在两个cmd窗口中执行命令whoami

#45


Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#46


learning~

#47


赵4 只知道胡说八道 !!!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

#48


learning~

#49


我觉得你应该把你最原始的需要描述一下
有可能就有人能提供其他的思路来实现,而不是现在的这个思路
现在好像是给自己限定了一个范围,从而陷入了具体实现的泥潭里了

#50


引用 11 楼 hurryboylqs 的回复:
你描述那么多还不如描述下你的功能需求,看的一头雾水
我之前也做过一个开机启动要求不弹UAC提示的问题,我用的是NT服务来启动它达到了需求,并不是很完美但是实现了
所需功能,看你的要求要启动一个普通权限的exe 直接CreateProcess不就OK了,就是运行在当前账户下的权限


引用 49 楼 mayudong1 的回复:
我觉得你应该把你最原始的需要描述一下
有可能就有人能提供其他的思路来实现,而不是现在的这个思路
现在好像是给自己限定了一个范围,从而陷入了具体实现的泥潭里了


我说得还不清楚?
你们是只看“贴子标题”,不看内容的吗 !!!
Win7以“管理员身份运行”的进程,如何启动另一个“标准权限”的进程?

你还想知道什么?
难不成还需要我把那个程序是做什么的、程序流程、实现的细节都讲一下?