【问题标题】:How to get location of %temp%\Low when running as a low intergrity process作为低完整性进程运行时如何获取 %temp%\Low 的位置
【发布时间】:2010-12-28 17:46:48
【问题描述】:

当进程以低完整性级别运行时,您无法写入 %temp%,因此我需要一种方法来找到 %temp%\Low 目录的路径(无需对“Low”一词进行硬编码)

【问题讨论】:

    标签: windows windows-7 windows-vista uac


    【解决方案1】:

    根据MSDN

    “低完整性进程可以在 %USER PROFILE%\AppData\LocalLow 下写入和创建子文件夹”

    我认为没有办法避免硬编码 thost 最后两个文件夹。

    【讨论】:

      【解决方案2】:

      根据MSDN

      在保护模式下,扩展程序可以 将文件写入下面的文件夹 用户的 UserProfile 文件夹,通常 %userprofile%\AppData\LocalLow。采用 SHGetKnownFolderPath 函数 FOLDERID_LocalAppDataLow 标志 获取展开后的文件夹名称。

      SHGetKnownFolderPath(FOLDERID_LocalAppDataLow, 0, 
         NULL, szPath, ARRAYSIZE(szPath));
      

      【讨论】:

      • 虽然这不是您问题的直接答案,但它似乎是您无需硬编码路径即可获得的唯一安全文件夹。我会使用它并在那里创建临时文件夹。 (当然,这会让您承担更多的责任来管理文件的最终删除)。
      • FOLDERID_LocalAppDataLow + "Temp\" 似乎有效,而且它是正确的路径,而我真的不喜欢硬编码的“Temp”。
      【解决方案3】:

      “理解和在保护模式下工作 Internet Explorer”一文的"Finding Low Integrity Write Locations" section 包含以下花絮:

      注意 保护模式会修改 IE 的环境变量。因此,在保护模式处于活动状态时调用 GetTempPath() 函数会返回 %Temp%\Low。

      【讨论】:

      • 我认为这不是真的。 GetTempPath 在我的情况下返回 `C:\Users\%username%\AppData\Local\Temp` 以表示低完整性进程。
      【解决方案4】:

      如果您只是在寻找要写入的临时目录,则可以遍历 %temp% 目录中的目录并尝试写入每个目录。

      如果 UAC 被禁用,. 应该是第一个。如果没有,.\Low 应该是唯一的。

      【讨论】:

      • 有趣的是,也许操作系统会在 %temp% environemnt 变量中为您提供 Temp\Low 路径,所以 GetTempPath() 返回正确的路径?我没有测试它。但是,这与 UAC 直接相关。 UAC 使您无法始终使用高完整性令牌运行 - 但即使禁用 UAC,也可以创建低完整性的进程。
      猜你喜欢
      • 1970-01-01
      • 2019-04-23
      • 2011-06-06
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多