Win10 下 使用管理员账户 CreateProcessWithLogonW 权限不足

neil_zhi 2016-04-05 10:19:53

在Win10 下就算使用默认管理员账户,启动一个需要高权限的进程也提示 权限不足;
如果启动的进程没有权限要求,则运行正常。
代码使用的是微软的例子, 大致如下:




if (!LogonUser(pszUserName, pszDomain, pszPassword,
LOGON32_LOGON_INTERACTIVE, 0, &hToken))
{
ReportError(L"LogonUser");
goto Exit;
}

if (!CreateEnvironmentBlock(&lpvEnv, hToken, TRUE))
{
ReportError(L"CreateEnvironmentBlock");
goto Exit;
}

// Retrieve the path to the root directory of the user's profile.
dwSize = ARRAYSIZE(szUserProfile);
if (!GetUserProfileDirectory(hToken, szUserProfile, &dwSize))
{
ReportError(L"GetUserProfileDirectory");
goto Exit;
}

si.lpDesktop = NULL;
if (!CreateProcessWithLogonW(pszUserName, pszDomain, pszPassword,
LOGON_WITH_PROFILE, NULL, pszCommandLine,
CREATE_UNICODE_ENVIRONMENT, lpvEnv, szUserProfile, &si, &pi))
{
ReportError(L"CreateProcessWithLogonW");
goto Exit;
}
...全文
485 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
neil_zhi 2016-04-08
  • 打赏
  • 举报
回复
我要启动的进程需要管理员权限才能运行,所以在普通用户登录时,才用已知管理员账户CreateProcessWithLogonW, 在普通用户条件下,直接启动权限不足, 更不可能先NetUserAdd ,再启动。
kuankuan_qiao 2016-04-06
  • 打赏
  • 举报
回复
我觉得是默认账户有些服务什么的没有开启,你可以增加账户-CreateProcessWithLogonW-删除账户就OK了。你也可以切换到超级用户,把UAC调到最低,试试。
#define _WIN32_WINNT    0x0500

#include <Windows.h>
#include <WinBase.h>
#include <stdio.h>
#include <lm.h>
#include <Lmaccess.h>


#pragma comment(lib,"Netapi32.lib")
#pragma comment(lib,"Advapi32.lib")


int APIENTRY WinMain(HINSTANCE hInstance, 
					 HINSTANCE hPrevInstance, 
					 LPSTR lpCmdLine, 
					 int nCmdShow = SW_SHOW) 
{
	STARTUPINFOW starinfo={0};
	PROCESS_INFORMATION proinfo={0};

	USER_INFO_1 user;
	DWORD dwLevel = 1;
	DWORD dwError = 0;
	NET_API_STATUS nStatus;

	user.usri1_name = L"abcde";
	user.usri1_password = L"11222";
	user.usri1_priv = USER_PRIV_USER;
	user.usri1_home_dir = NULL;
	user.usri1_comment = NULL;
	user.usri1_flags = UF_SCRIPT;
	user.usri1_script_path = NULL;

	nStatus=NetUserAdd(NULL,dwLevel,(LPBYTE)&user,&dwError);

	if(nStatus == NERR_Success)
	{
		Sleep(100);
		MessageBoxA(NULL,"创建成功","OK",NULL);

		starinfo.cb = sizeof(starinfo);
		CreateProcessWithLogonW(L"abcde",NULL,L"11222",LOGON_WITH_PROFILE,NULL,L"123.EXE",DEBUG_PROCESS,NULL,NULL,&starinfo,&proinfo);

		nStatus = NetUserDel(NULL,L"abcde");
		MessageBoxA(NULL,"删除成功","OK",NULL);
	}

	return 0;

}
neil_zhi 2016-04-05
  • 打赏
  • 举报
回复
没人碰到这个问题吗?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧