首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateProcessAsUser错误1314

CreateProcessAsUser错误1314
EN

Stack Overflow用户
提问于 2009-09-25 05:33:15
回答 4查看 38.6K关注 0票数 15

我想在另一个用户下创建一个进程。所以我使用LogonUser和CreateProcessAsUser。但我的问题是,CreatePtocessAsUser总是返回错误代码1314,这意味着“客户端没有持有所需的特权”。所以我的问题是,我做错了什么?或者,我如何才能将特权授予句柄?(我认为句柄应该有权限,或者我错了?)很抱歉我的英语错误,但我的英语知识不是最好的:)

如果有人知道如何更正我的应用程序,请帮助。

这是我代码的一部分。

代码语言:javascript
复制
STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcInfo;
TOKEN_PRIVILEGES tp;
memset(&ProcInfo, 0, sizeof(ProcInfo));
memset(&StartInfo, 0 , sizeof(StartInfo)); 
StartInfo.cb = sizeof(StartInfo); 
HANDLE handle = NULL;

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ALL_ACCESS, &handle)) printf("\nOpenProcessError");

if (!LookupPrivilegeValue(NULL,SE_TCB_NAME,
//SE_TCB_NAME,
&tp.Privileges[0].Luid)) {
printf("\nLookupPriv error");
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes =
SE_PRIVILEGE_ENABLED;//SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(handle, FALSE, &tp, 0, NULL, 0)) {
printf("\nAdjustToken error");
}

i = LogonUser(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &handle);
printf("\nLogonUser return  : %d",i);
i = GetLastError();
printf("\nLogonUser getlast : %d",i);
if (! ImpersonateLoggedOnUser(handle) ) printf("\nImpLoggedOnUser!");

i = CreateProcessAsUser(handle, "c:\\windows\\system32\\notepad.exe",NULL, NULL, NULL, true, 
CREATE_UNICODE_ENVIRONMENT |NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL, 
&StartInfo, &ProcInfo);    
printf("\nCreateProcessAsUser return  : %d",i);
i = GetLastError();
printf("\nCreateProcessAsUser getlast : %d",i);

CloseHandle(handle); 
CloseHandle(ProcInfo.hProcess); 
CloseHandle(ProcInfo.hThread); 

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-25 05:39:58

运行应用程序的本地帐户必须在本地安全策略中启用以下权限:

  • 作为操作系统的一部分
  • Create a token object
  • Log on as a batch job

编辑:请参阅下面Patel的答案。在这种情况下,正确的权限应该是:

  • "Replace a process level token"
票数 18
EN

Stack Overflow用户

发布于 2016-03-02 05:57:14

经过几个小时的寻找,我终于在以下来自MSDN的链接中找到了答案。希望它能在未来对某人有所帮助。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/c905c900-cae1-4081-b0c9-00f10238e7ad/createprocessasuser-failed?forum=clr

“若要解决此问题,您需要使用的”替换进程级令牌“权限提升调用CreateProcessAsUser的帐户的权限。为此,请打开控制面板/管理工具/本地安全策略,并将用户帐户添加到”替换进程级令牌“权限。(您可能需要注销甚至重新启动才能使此更改生效。)

票数 14
EN

Stack Overflow用户

发布于 2009-09-25 05:57:23

您的代码将SE_TCB_NAME特权添加到您的令牌。

MSDN说:“通常,调用CreateProcessAsUser函数的进程必须具有SE_ASSIGNPRIMARYTOKEN_NAME和SE_INCREASE_QUOTA_NAME特权。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1475577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档