5

我将我的可执行文件显示为需要管理员:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

    <!-- Disable Windows Vista UAC compatability heuristics -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo> 
</assembly>

然后我对其进行了数字签名。

但是当我运行可执行文件时,我注意到一些奇怪的事情:同意对话框上的可执行文件的名称从更改PingWarning.exepinxxxx.tmp;好像制作了一个临时副本,并且正在运行:

替代文字

我挖出了 Process Montior,看看是否有人在我启动我的可执行文件时创建了*.tmp文件,并且有:

替代文字

此特定容器内的应用程序信息服务有意将我的可执行文件复制到 Windows 临时文件夹,并从那里请求用户“同意”;给出一个无效的文件名。svchost

一旦获得同意,可执行文件将从其原始位置运行: 链接文本

如果我不对其进行数字签名,则该文件不会复制到临时文件夹:

替代文字


所以我的问题是当我对我的可执行文件进行数字签名时出现在同意对话框中的无效文件名已显示为.requireAdministrator

做什么?


更新:

我能找到的最接近解释的东西来自Uninformed.org

打破经纪人

在请求 uiaccess 的程序的启动请求的情况下, 调用appinfo!RAiLaunchAdminProcess来为请求提供服务。然后验证该过程是否在appinfo!AiCheckSecureApplicationDirectory允许的目录集(硬编码)内 。在验证程序是从允许的目录中启动后,控制权最终传递给appinfo!AiLaunchProcess ,它执行为启动请求提供服务所需的剩余工作。此时,由于“安全”应用程序目录要求,受限用户(或以低完整性运行的用户,就此而言)不可能将自定义可执行文件放置在任何“安全”应用程序目录中。

提示是一些(未记录的、未指定的)硬编码路径,应用程序被“允许”位于其中。

另一个是用于请求 uiaccess 的程序。就我而言uiAccess="false",我的原始清单中没有。但是更改清单以包含无 ui 访问权限:

但这并没有解决原来的问题。


更新二:

来自MSDN

SendSAS 函数

重要uiAccess标志设置为 true 的应用程序必须经过 Authenticode签名才能正常启动。此外,应用程序必须驻留在文件系统中受保护的位置。目前,有两个允许的受保护位置:

  • **\程序文件**
  • **\windows\system32**

这似乎支持了可执行请求uiAccess必须位于允许的位置的概念。除了我不要求 uiAccess。

4

1 回答 1

2

我在未签名的应用程序中看到了同样的问题,特别是在 NSIS 和 InnoSetup 安装程序中(当 1gb+ 安装程序被复制到 %windir%\temp 然后由许可.exe 扫描时有点问题)

NSIS 错误跟踪器有一个关于它的条目。早在我调查此事时,我与@MS 的某人联系,他们本应联系在 UAC 工作的人,但实际上没有任何结果。我从那次谈话中得到的唯一适用信息是这句话:

Windows 中的一位朋友模糊地记得,这可能是在显示信任对话框时担心文件篡改的一种缓解措施

于 2010-05-14T10:14:45.900 回答