问题标签 [uac]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1489 浏览

c++ - Can I use ChangeWindowMessageFilter to receive DocumentComplete events from Protected Mode IE?

In my app, I want to open a new IE window, then receive and process DocumentComplete and NavigateComplete2 events fired from the new opened IE. In XP, everything works fine. In Vista, the new IE is running in Protected Mode, so my app is not able to receive DocumentCompelte event from the IE.

I do not want to change any security level, like open IE in Protected Mode off or lower my app integrity. I wonder if I can use ChangeWindowsMessageFilter to receive DocumentComplete and NavigateComplete2 events from Protected Mode IE? My code is like:

Thanks!

0 投票
4 回答
11373 浏览

windows-7 - 检测注册表虚拟化

我有一组 C# (v2) 应用程序,我在 Win7(以及在较小程度上是 Vista)中的注册表虚拟化方面苦苦挣扎。

我有一个共享注册表配置区域,我的应用程序需要在 HKLM\Software\Company 中访问它... 在 Vista 之前,所有内容都只是根据需要写入和读取该位置。

代码适当地检测到写入该注册表项的失败并会适当地回退(改为写入 HKCU 并通知用户他们应用的设置只会影响当前用户)。

在 Vista 中,注册表虚拟化打破了这一切,因为我们用于 HKLM 写入的访问检查将“成功”静默“成功”并虚拟化到 HKCR\VirtualStore\Machine...。在这种情况下,用户会认为他们已经保存了机器范围的配置,但只是写入了虚拟存储。

可悲的是,即使尝试枚举 HKLM reg 键上的权限,也会显式返回结果,表明用户是否有权访问。

当我们添加 Vista 支持时,我们使用的解决方法是对 HKLM 执行探测写入...,然后检查 HKCR\VirtualStore\Machine... 以获得相同的值,并注意如果找到该值,则虚拟化已发生。

Win7 似乎(再次)打破了这一点,因为针对显式虚拟位置 (HKCR) 的查询现在显示来自 HKLM 位置的合并结果,即使写入未虚拟化也是如此。

有没有人有任何解决这个问题的建议?

约束: - 我需要一个无需提升即可工作的解决方案(当我没有管理员级别的权限时,我将回退到 HKCU 中的每个用户配置,但我需要能够可靠地检测到这种情况)。

  • 它需要与 v2 C# 应用程序一起使用(我在 C++ 代码中看到的一个选项是嵌入一个清单,该清单会禁用 .exe 的虚拟化,但我无法在 C# V2 中做到这一点,请参阅禁用文件夹虚拟化在 windows 中) .

  • 它需要在没有“安装程序”的情况下工作(这排除了我们需要通过 REG FLAGS... 命令禁用注册表项上的虚拟化的能力)。

0 投票
2 回答
6087 浏览

windows - 在哪里存储所有用户的注册表数据

我想在 Windows 注册表中的所有用户之间共享少量数据。用于登录到机器的任何用户或机器上的服务之间的共享读写访问。有没有可以做到这一点的地方?我曾尝试使用“HKEY_USERS\.DEFAULT\Software\”,但这似乎被 Vista UAC 规则阻止了。

0 投票
2 回答
4595 浏览

windows - Windows 7:利用自动提升来提升我自己的流程?

从 2009 年 7 月 Technet 一篇题为Inside Windows 7 User Account Control的文章中,Mark Russinovish描述了以标准用户身份运行的应用程序可以静默提升并获得管理权限:

...在具有标准用户权限的 PA(受保护的管理员)帐户中运行的第三方软件可以利用自动提升来获得管理权限。例如,该软件可以使用 WriteProcessMemory API将代码注入Explorer,并使用 CreateRemoteThread API执行该代码,这种技术称为DLL 注入。由于代码在资源管理器(Windows 可执行文件)中执行,因此它可以利用自动提升的 COM 对象(如复制/移动/重命名/删除/链接对象)来修改系统注册表项或目录并赋予软件管理权限权利。

他继续提到恶意软件永远不会这样做,因为这太难了:

...这些步骤需要刻意的意图,而不是微不足道的...

最后

...恶意软件可以使用相同的技术获得管理权限。

所以我很想看到一个实际的实现。


我原以为PROCESS_VM_WRITE将是不授予标准用户的权利。

注意:我自己永远不会做任何坏事,就像世界上所有其他开发人员一样。

0 投票
3 回答
1937 浏览

delphi - Vista: Can an EXE bypass user confirmation while invoking another EXE?

I have 2 applications written in Delphi. The first exe (with a user interface) calls another using ShellExecuteEx(), which runs as a background process.

When the first exe invokes the second, one of these two things happen:

  1. When I log in as an admin, a UAC dialog comes up with the Allow/Cancel prompts. Selecting Allow continues the execution.

  2. If I log in as non-admin, an admin credentials dialog box is displayed, and I need to enter the admin username/password to continue.

On both occasions, I want the second exe to run without any user intervention. How can I make it possible?

And yes, I tried applying the ElevateCreateProcess mitigation as suggested by SUA tool, but it doesn't seem to work - the behaviour is as before.

Thanks for your help.

0 投票
2 回答
1775 浏览

c++ - UAC是否可以在不启动另一个进程的情况下提升一个进程

我想知道一个程序是否有可能通过 UAC 提示来提示用户提高它自己的权限而不启动另一个进程。

我可以在互联网上找到的所有示例似乎都是 ShellExecute “runas”,它创建了一个具有提升权限的新进程。

如果这不可能,那么我想我最好的解决方案是创建一个命名管道,使用特殊参数 ShellExecute 我自己的程序,然后将执行操作所需的所有数据推到管道中。如果有更好的建议,我会很高兴听到这些建议。

感谢您的任何意见。

0 投票
4 回答
10707 浏览

c# - 如何在 .NET/C# 中以编程方式将应用程序的快捷方式 (.lnk) 添加到 Startup 文件夹

我的应用程序将有一个每台机器(而不是每个用户)的启动快捷方式。我可以在安装过程中创建快捷方式没问题。当用户稍后将其删除然后尝试重新启用时,我的问题就出现了。换句话说,他们关闭了 RunOnStartup(这会删除 Startup 墨迹),然后他们决定确实希望它在启动时运行,因此他们返回首选项并重新启用。

显然,这是 .NET 的一个很常见的抱怨,即没有创建快捷方式的本地方法。但是,还没有找到一个很好的解决方案。

我发现/考虑的解决方案:

  • 而不是创建一个快捷方式。复制一份就行了。这可能是一个很好的解决方案。我不能依赖开始菜单链接。但是,我想我可能会创建一个并将其保存在程序目录中......这将问题转移到我的安装程序上,必须使用安装时指定的适当路径创建快捷方式。

  • 这个其他 stackoverflow 答案是什么,并使用一个 COM 包装器对象。我想避免使用 COM。它也是在 2003 年编写的。所以,我不确定它对 vista 的支持程度。我会试一试,但手边没有vista box。

  • 请改用注册表。这就是我目前的做法……但在 Vista 上遇到了问题。似乎普遍认为启动菜单快捷方式是执行此操作的正确方法,因此这就是我的目标。

此外,我必须处理普通用户(不是管理员)尝试更改此首选项的情况。在这种情况下,我需要优雅地失败,或者在 vista 的情况下允许用户输入管理员密码以获取管理员安全令牌。已经正确考虑到这种情况的答案会很棒。

如果这个话题已经被覆盖,我很抱歉。我在发帖前四处搜寻。

更新:复制安装程序创建的快捷方式是最佳解决方案。完成后我将发布代码...遇到了一些障碍 a) Environment.GetSpecialFolder 没有对已解决的 StartMenu 的引用...但是,现在我正在处理提升权限以将文件复制到适当的位置。我为此主题创建了一个新的 stackoverflow 问题:如何通过提示用户输入管理员凭据来将文件复制为 Vista 中的“标准用户”(即“管理选择应用程序”)?

0 投票
2 回答
1214 浏览

c# - 如何通过提示用户输入管理员凭据在 Vista 中将文件复制为“标准用户”(即“管理选择应用程序”)?

我有 UAC 开发指南所说的“管理选择应用程序”。如果您熟悉这是什么,请跳到下一节。

背景:

我想让“标准”用户能够在我的应用程序的首选项中选择/取消选择“启动时运行”选项。

由于我的应用程序是每台机器(不是每个用户),需要发生的是它需要删除或复制快捷方式文件到开始菜单/程序/启动文件夹中,这将需要管理访问权限才能执行此操作。

所以,我想要的是出现“用户帐户控制凭据提示”,这样如果用户有管理员帐户,他们也可以输入凭据。这显然是应用程序的设计方式,以防止用户在每次需要执行管理操作时都必须切换到另一个帐户。

摘自 MSDN 文档:

行政选择申请

提升的进程或 COM 对象

初始应用程序无需提升即可启动。用户界面中需要管理访问令牌的那些项目都装饰有盾牌图标作为标识。此装饰向用户表明使用该功能需要管理员批准。当应用程序检测到这些按钮之一已被选中时,它有以下两种选择。

  • 应用程序使用 ShellExecute() 启动第二个程序来执行管理任务。第二个程序将被标记为requireAdministrator 的requestedExecutionLevel,从而导致用户被提示批准。第二个程序将使用完整的管理访问令牌运行,并且能够执行所需的任务。-或者-
  • 应用程序使用 CreateElevatedComObject() 启动 COM 对象。此 API 将在获得批准后使用完整的管理访问令牌启动 COM 对象,并且此 COM 对象将能够执行所需的任务。

我只需要复制一个文件......使用 ShellExecute() 分叉一个新进程似乎太过分了,而且我对 COM 的了解还不够,不知道是否可以使用它来复制文件。我希望有人可以发布一些代码,这些代码提供了一种复制文件的方法,并且理想情况下还可以解释如何使用“sheild decorator”来装饰 MenuItem。

笔记:

我查看了microsoft 提供的 UAC Demo,它在多个 StackOverflow 帖子中被引用,例如(Request Windows Vista UAC elevation if path is protected?)关于权限相关的主题。该代码只有一个调用单独进程的示例。

0 投票
4 回答
2826 浏览

c++ - 当 UAC 打开时,如何在 VC++ 6.0 中创建文件?

当 UAC 打开但没有以管理员身份运行时,如何在 C++ 中创建文件?

我正在尝试在以下路径中创建一个文本文件:Vista 的 UAC 开启时,VC++ 6.0 中的“C:\Programdata\Desktop”。但是,Createfile(...)由于“权限被拒绝”而失败。

当我使用“以管理员身份运行”运行示例应用程序时,它可以工作。但是我的示例应用程序不应该“以管理员身份运行”。

当 UAC 开启时,是否有任何 API 可以授予上述路径的权限?

示例代码: const nSize = 100; CStdioFile 文件;CFileException obFileExp; CString csFilePath(_T("C:\ProgramData\Desktop\sample.txt"));


注意:UAC 应该打开并且 VC++ 6.0 不应该以管理员身份运行

0 投票
5 回答
9466 浏览

java - UAC 和 Java

是否可以从 Java 应用程序中请求提升权限?我看到的建议似乎都集中在运行外部可执行文件或设置清单以在启动时请求权限。例如,这些对小程序不可用。有没有办法从正在运行的应用程序请求提升?