【发布时间】:2014-08-24 23:31:56
【问题描述】:
我刚刚运行了一个多年前编写的旧程序,在 Vista 发布前几年。 Windows (7) 给了我 UAC 提示并要求允许我运行它。我很惊讶,因为它是一个相对简单的程序,它没有做太多花哨的事情,当然也没有什么需要提升的特权。然后我检查了目录,果然,Windows 在程序上覆盖了盾牌图标。
我快速扫描了代码,没有看到任何明显会触发 UAC 提示的内容。此外,该程序与我编写的其他几个程序共享一个框架,这些程序都没有 UAC 要求。有问题的程序以及其他不触发 UAC 提示的程序都存储在 (FAT32) 闪存驱动器上的同一目录中。
这个程序与其他几乎相同的程序的唯一真正独特之处在于它使用 ShellExecute 允许用户启动默认网络浏览器以打开选定的 URL,但我无法想象如果/为什么这实际上需要提升权限。
现在我正在尝试查找有关 Windows 使用哪种启发式方法来确定是否应使用 UAC 提示的某种信息。我知道旧的安装程序通常会触发提示,但它们通常称为setup.exe 或install.exe,而这有一个非常无害的名称(udb.exe)。我怀疑它正在检测某些函数调用或某些函数调用(当然,这意味着 Windows 资源管理器会读取并反汇编所有似乎值得怀疑的可执行文件)。
我以为会有这方面的一些信息,但我所做的研究只发现了一些场外讨论(上面或右侧的“类似问题”列表中没有提及),其中列出了一些原因,似乎都不适用:
- 程序的特定请求(这是不可能的,因为它是在 UAC 存在之前编写的),
- 缺少清单(它确实有,但无法解释为什么其他程序不触发它)
- 文件名/路径的内部列表(此处不适用)
- 来源(同样,这并不能说明其他程序还可以)
- 访问受限文件/注册表项(此处也不适用)
- 资源条目(同样,其他程序共享公共资源数据)
- 其他与系统相关的活动(同样,不适用于该计划)
我最终找到了一些相关的问题,例如one that asked what I am,但最终得到了一个完全不同的结果,在这里没有帮助,或者另一个问similar, yet opposite question 同样没有帮助的结果。不幸的是,我发现的best question 是关于安装程序/更新程序的(当然,这里不适用),也没有任何帮助,因为答案与我在其他网站上找到并在上面列出的旧信息相同。
是否有人知道 UAC 触发器列表或其他方式来弄清楚为什么 Windows 会认为某些程序需要提升?是否有受限制的 API 函数列表之类的?
为了清楚起见,我试图找出为什么 Windows 会为 UAC 标记一个程序,而不是另一个类似的程序。
【问题讨论】:
-
@HarryJohnston,你也误解了这个问题。就像我说的,我很困惑为什么我在 Vista 存在之前编写的一个程序不会触发 UAC,而一个类似的程序会触发。我想了解 为什么 Windows 这样做。如果有函数、文件、注册表项、字符串等的列表,那么我可以针对我的代码对其进行搜索,以试图找出 Windows 看到的导致它关闭的内容。至于清单,这与问题的重点无关。我并不想避免提示,我想知道为什么它会发生。就像我说的,我找不到原因。
-
UAC is based at user rights, not some wonderful triggers, such as files, strings, etc.@Xearinox,错误!众所周知,有有某些因素可以触发 UAC。做一点研究。例如,我已经列出了一些可能导致它的东西,比如文件名是setup.exe。这与权限有什么关系‽ -
@HarryJohnston,首先,如果只是出于好奇,这不是题外话,它与 Windows API 函数及其效果有关,这肯定是这里的主题。其次,我想知道为什么,因为它不应该发生。我真的不明白为什么它这么难理解,为什么你对一个简单的问题有这么大的抵触情绪。此外,您是否看到我链接到的类似问题没有关闭为题外话?
-
Sounds like a big waste of time to me那么幸好你不是网站管理员或仲裁者什么是或不是有效的时间使用。如果你认为我的问题太可怕了,它正在摧毁网站并带来世界末日,只需投票关闭,或标记它让模组决定。至于你所说的其他一切,除非你能提供某种理由认为你是从权威的立场说话的,否则听起来你只是在猜测触发器(你真的认为 Explorer 有启发式?)以及微软的已经或尚未发布或记录。 -
我怀疑你会得到你想要的答案。 IMO,您最好根据具体情况分析问题可执行文件。
标签: windows triggers uac heuristics