我正在寻找一种方法来提升线程或进程的执行权限,而不会出现UAC弹出。运行进程的用户是管理用户,我有他的用户名和密码可用。
我需要这样做,以便进行一些管理工作,比如重新启动服务和将文件写入系统目录。我的应用程序是远程运行的,没有交互式用户来确认UAC对话框。禁用UAC不是一个选项。
我已经尝试了LogonUser()
,ImpersonateLoggedOnUser()
,CreateProcessAsUser()
和DuplicateTokenEx()
在更多的时间,但没有找到正确的组合,如果这是可能的。
具体来说,我试过的是:
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上运行的。
发布于 2012-02-16 08:09:14
通过尝试登录这个或那个用户,你将一事无成。问题不在于用户,而是询问管理权限的上下文。甚至管理员也必须确认UAC提示。
如果你所要求的是可能的,它将彻底击败UAC的概念。只要会话是交互式的(而且,在Win7上,程序不是来自Windows的短程序列表,如Services ),您就无法绕过提示。
正如其他人所说,通常的解决方案是编写一个服务,并让您的交互式应用程序使用标准的IPC机制(如命名管道)与服务对话。但是,请注意在两端创建IPC对象所需的安全描述符:在服务和交互应用程序中,用户上下文是不同的。
发布于 2012-02-16 07:04:58
通常,您需要绕过UAC的建议解决方案是编写服务。该服务将以完全权限运行,您的应用程序将要求它执行操作。
发布于 2012-02-15 23:28:42
我相信您可以使用任务计划程序绕过UAC提示符。在这里找到了一组指令:http://www.vikitech.com/253/create-shortcuts-for-trusted-programs-to-bypass-windows-7-uac-check
这将是一些工作,但它肯定可以通过代码完成。
https://stackoverflow.com/questions/9298083
复制相似问题