System权限变为uers权限(非常急) 我在win7下。我有一个进程是system权限运行的进程。进程中会createprocess一个进程。然后我需要这个进程调出来的时候不是system进程而是user的权限。我在createprocess的时候把进程的继承属性设置为了FALSE但是还是调出来是USER的权限。改怎么来弄呢。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 详细点啊哥哥。那个只能提升权限吧。可以降低权限吗? user权限是哪个参数啊? 获取当前Explorer.exe的token,然后CreateProcessAsUser的方式模拟当前资源管理器的session,这样就可以启动当前User权限的进程了... http://blog.csdn.net/sdpdww/archive/2008/12/16/3531227.aspx 这个我弄提升为 system权限的时候炒过一段。现在我要降低为 user 的权限怎么写啊。能把关键的代码写两句吗?万分感谢 CHandle processToken;VERIFY(::OpenProcessToken(::GetCurrentProcess(), TOKEN_DUPLICATE, &processToken.m_h));CHandle duplicateToken;VERIFY(::DuplicateTokenEx(processToken, MAXIMUM_ALLOWED, 0, // token attributes SecurityAnonymous, TokenPrimary, &duplicateToken.m_h));WellKnownSid integrityLevelSid(WellKnownSid::MandatoryLabelAuthority, SECURITY_MANDATORY_LOW_RID);TOKEN_MANDATORY_LABEL tokenIntegrityLevel = { 0 };tokenIntegrityLevel.Label.Attributes = SE_GROUP_INTEGRITY;tokenIntegrityLevel.Label.Sid = &integrityLevelSid;VERIFY(::SetTokenInformation(duplicateToken, TokenIntegrityLevel, &tokenIntegrityLevel, sizeof (TOKEN_MANDATORY_LABEL) + ::GetLengthSid(&integrityLevelSid)));STARTUPINFO startupInfo = { sizeof (STARTUPINFO) };ProcessInfo processInfo;VERIFY(::CreateProcessAsUser(duplicateToken, L"C:\\Windows\\Notepad.exe", 0, // cmd line 0, // process attributes 0, // thread attributes FALSE, // don't inherit handles 0, // flags 0, // inherit environment 0, // inherit current directory &startupInfo, &processInfo));用了这段代码还是 system 我就郁闷了。 弄个User的SID给它不就行了。你升会了,降不是一样的么?SID不同而已啊 我上面的代码不就是用的 SID的吗?没用啊。你写点出来参考参考呢 VERIFY(::OpenProcessToken(::GetCurrentProcess(),//这里就不对了,你得到的是当前进程的Token,你要得到一个User权限进程的Token,比如Explorer.exe TOKEN_DUPLICATE, &processToken.m_h));CHandle duplicateToken;VERIFY(::DuplicateTokenEx(processToken, MAXIMUM_ALLOWED, 0, // token attributes SecurityAnonymous, TokenPrimary, &duplicateToken.m_h)); 不好意思。该成了Explorer.exe还是一样。我是没理解啊。都说了是抄的啊。你说说原理呢。为什么要这样。我的是主进程是服务加载起来的具有system权限 用ATL的CAccessToken类然后调用如下成员函数CAccessToken::CreateProcessAsUser vs2008 使用 CView出现了些问题 SysTreeView32 控件怎么用文件系统填充(在线等..) 弱弱的问一个问题,采用SDK编程,是不是不用类啊!! 转让《VC++技术内幕》 搞很久一直搞不好的一个问题,help!!! 关于主程序与ActiveX控件的问题 问几个极极极菜的问题~回答是或不是就行了(有解释更好) 怎样画流动矩形? 如何使文档一生成就最大化? 新手:如何在vc++中实现标签对话框。 Ctreectrl 例子问题 自组织映射算法中的不解
VERIFY(::OpenProcessToken(::GetCurrentProcess(),
TOKEN_DUPLICATE,
&processToken.m_h));
CHandle duplicateToken;
VERIFY(::DuplicateTokenEx(processToken,
MAXIMUM_ALLOWED,
0, // token attributes
SecurityAnonymous,
TokenPrimary,
&duplicateToken.m_h));
WellKnownSid integrityLevelSid(WellKnownSid::MandatoryLabelAuthority,
SECURITY_MANDATORY_LOW_RID);
TOKEN_MANDATORY_LABEL tokenIntegrityLevel = { 0 };
tokenIntegrityLevel.Label.Attributes = SE_GROUP_INTEGRITY;
tokenIntegrityLevel.Label.Sid = &integrityLevelSid;
VERIFY(::SetTokenInformation(duplicateToken,
TokenIntegrityLevel,
&tokenIntegrityLevel,
sizeof (TOKEN_MANDATORY_LABEL) + ::GetLengthSid(&integrityLevelSid)));
STARTUPINFO startupInfo = { sizeof (STARTUPINFO) };
ProcessInfo processInfo;
VERIFY(::CreateProcessAsUser(duplicateToken,
L"C:\\Windows\\Notepad.exe",
0, // cmd line
0, // process attributes
0, // thread attributes
FALSE, // don't inherit handles
0, // flags
0, // inherit environment
0, // inherit current directory
&startupInfo,
&processInfo));用了这段代码还是 system 我就郁闷了。
你升会了,降不是一样的么?SID不同而已啊
TOKEN_DUPLICATE,
&processToken.m_h));
CHandle duplicateToken;
VERIFY(::DuplicateTokenEx(processToken,
MAXIMUM_ALLOWED,
0, // token attributes
SecurityAnonymous,
TokenPrimary,
&duplicateToken.m_h));
然后调用如下成员函数
CAccessToken::CreateProcessAsUser