首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Win32:使用用户/密码绕过UAC

Win32:使用用户/密码绕过UAC
EN

Stack Overflow用户
提问于 2012-02-15 17:20:52
回答 4查看 3.3K关注 0票数 3

我正在寻找一种方法来提升线程或进程的执行权限,而不会出现UAC弹出。运行进程的用户是管理用户,我有他的用户名和密码可用。

我需要这样做,以便进行一些管理工作,比如重新启动服务和将文件写入系统目录。我的应用程序是远程运行的,没有交互式用户来确认UAC对话框。禁用UAC不是一个选项。

我已经尝试了LogonUser()ImpersonateLoggedOnUser()CreateProcessAsUser()DuplicateTokenEx()在更多的时间,但没有找到正确的组合,如果这是可能的。

具体来说,我试过的是:

代码语言:javascript
运行
复制
HANDLE token = 0;
LogonUserA(user, NULL, pass, LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT, &token);
HANDLE impToken = 0;
DuplicateToken(token, SecurityImpersonation, &impToken);
ImpersonateLoggedOnUser(impToken);
CreateFileA("C:\\windows\\blabla.dll", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

最后一次调用在GetLastError()=1346中失败,“没有提供所需的模拟级别,或者提供的模拟级别无效。”

我做错了什么?

注意-这是在Win2008 R2上运行的。

EN

回答 4

Stack Overflow用户

发布于 2012-02-16 08:09:14

通过尝试登录这个或那个用户,你将一事无成。问题不在于用户,而是询问管理权限的上下文。甚至管理员也必须确认UAC提示。

如果你所要求的是可能的,它将彻底击败UAC的概念。只要会话是交互式的(而且,在Win7上,程序不是来自Windows的短程序列表,如Services ),您就无法绕过提示。

正如其他人所说,通常的解决方案是编写一个服务,并让您的交互式应用程序使用标准的IPC机制(如命名管道)与服务对话。但是,请注意在两端创建IPC对象所需的安全描述符:在服务和交互应用程序中,用户上下文是不同的。

票数 4
EN

Stack Overflow用户

发布于 2012-02-16 07:04:58

通常,您需要绕过UAC的建议解决方案是编写服务。该服务将以完全权限运行,您的应用程序将要求它执行操作。

票数 2
EN

Stack Overflow用户

发布于 2012-02-15 23:28:42

我相信您可以使用任务计划程序绕过UAC提示符。在这里找到了一组指令:http://www.vikitech.com/253/create-shortcuts-for-trusted-programs-to-bypass-windows-7-uac-check

这将是一些工作,但它肯定可以通过代码完成。

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

https://stackoverflow.com/questions/9298083

复制
相关文章

相似问题

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